昨日, 一朋友问了我几个跨域问题, 我在解释的时候, 越说越发现自己有一些点模糊了....看来还是没有真的弄懂, 只是懂了一点皮毛, 一些深度的问题都没有发现
-
浏览器发起请求,访问百度页面, 这个时候 html里面的
js,css文件都是跟这个http请求一起加载到浏览器上的. -
请求: 客户机向服务器发送数据. 响应: 服务器向客户机发送数据.
-
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年发布了它的国际标准。
我们访问一个普通网站时,当浏览器加载完HTML、CSS、JS以后,网站就固定了,如果网站内容发生改变,必须刷新网页后,才能看到更新内容。Ajax(Asynchronous Javascript And XML 异步的Javascript和XML). 让我们在浏览器中,我们能够不刷新页面,通过的方式去获取一些新的内容并更新。
-
跨域请求到底会不会发送给后端? 会,跨域请求会发送,只是浏览器不会将返回的数据交给你的js程序。
-
浏览器如何判断跨域 当你在浏览页面A, 这个时候页面A发起了一个Ajax请求, 目标B. 首先, 浏览器收到响应之后, 会查看我们的当前页面A的 域名 与请求目标B 域名是否是 同源. 如果是, 查看请求头文件是否带 Access-Control-Allow-Origin 如果有则返给我们数据. 举例:
- 你在访问一个页面A(www.xxx.com), 这个A里面有一个js代码, 要发起ajax请求到某个连接.
- 你的浏览器发起到这个链接的请求
- 这个时候后端看到有一个ip为 178.38.202.2的请求发过来, 而且该请求header里面的origin是 www.xxx.com
- 后端去查看这个 origin 是否是在自己允许范围内的. 如果允许, 并在response的header里面加入信息返回
- 浏览器收到response的域名, 来判断是否跨域