一场由朋友关于跨域问题引发的思考

129 阅读2分钟

昨日, 一朋友问了我几个跨域问题, 我在解释的时候, 越说越发现自己有一些点模糊了....看来还是没有真的弄懂, 只是懂了一点皮毛, 一些深度的问题都没有发现

  1. 浏览器发起请求,访问百度页面, 这个时候 html里面的js,css文件都是跟这个http请求一起加载到浏览器上的.

  2. 请求:  客户机向服务器发送数据. 响应: 服务器向客户机发送数据.

  3. Ajax的基本概念

1999年,微软公司发布 IE 浏览器5.0版,第一次引入新功能:允许 JavaScript 脚本向服务器发起 HTTP 请求。这个功能当时并没有引起注意,直到2004年 Gmail 发布和2005年 Google Map 发布,才引起广泛重视。2005年2月,AJAX 这个词第一次正式提出,它是 Asynchronous JavaScript and XML 的缩写,指的是通过 JavaScript 的异步通信,从服务器获取 XML 文档从中提取数据,再更新当前网页的对应部分,而不用刷新整个网页。后来,AJAX 这个词就成为 JavaScript 脚本发起 HTTP 通信的代名词,也就是说,只要用脚本发起通信,就可以叫做 AJAX 通信。W3C 也在2006年发布了它的国际标准。

我们访问一个普通网站时,当浏览器加载完HTMLCSSJS以后,网站就固定了,如果网站内容发生改变,必须刷新网页后,才能看到更新内容。Ajax(Asynchronous Javascript And XML 异步的Javascript和XML). 让我们在浏览器中,我们能够不刷新页面,通过的方式去获取一些新的内容并更新。

  1. 跨域请求到底会不会发送给后端? 会,跨域请求会发送,只是浏览器不会将返回的数据交给你的js程序。

  2. 浏览器如何判断跨域 当你在浏览页面A, 这个时候页面A发起了一个Ajax请求, 目标B. 首先, 浏览器收到响应之后, 会查看我们的当前页面A的 域名 与请求目标B 域名是否是 同源. 如果是, 查看请求头文件是否带 Access-Control-Allow-Origin 如果有则返给我们数据. 举例:

  1. 你在访问一个页面A(www.xxx.com), 这个A里面有一个js代码, 要发起ajax请求到某个连接.
  2. 你的浏览器发起到这个链接的请求
  3. 这个时候后端看到有一个ip为 178.38.202.2的请求发过来, 而且该请求header里面的origin是 www.xxx.com
  4. 后端去查看这个 origin 是否是在自己允许范围内的. 如果允许, 并在response的header里面加入信息返回
  5. 浏览器收到response的域名, 来判断是否跨域