跨域问题
跨域CORS
1.
Cors:跨域资源共享:Cross-origin resource sharing
它允许浏览器向跨源服务器,发出XMLHttpRequest,从而克服了AJAX只能同源使用的限制。
2.
Cors需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10
整个cors通信过程,都是浏览器自动完成的,不需要用户参与,对于开发者,cors通信与同源的AJAX通信没有差别,代码完全一样,浏览器一旦发现AJAX请求跨域,就会自动添加一些附加的头信息,有时还会多出一次附加请求,用户不会有感觉。
因此,实现cors通信的关键是服务器,只要实现了CORS接口,就可以实现跨源通信。
3.
两种请求:
浏览器将cors请求分为两大类:简单请求,非简单请求。
满足以下条件为简单请求:
(1).请求方法为以下之一:
Head get post
(2).http的头信息不超出以下几种字段:
Accept
Accept-language
Content-language
Last-Event-ID
Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
其余不满足的为非简单请求。
浏览器对于两种请求的处理不一样
4.
基本流程
(1) 简单请求
浏览器直接发出CORS请求,具体说,就是在头信息中添加一个Origin字段。
例子:
浏览器发现这次跨源AJAX请求是简单请求,就自动在头信息中,添加Origin字段。
GET /cors HTTP/1.1
Origin: http://api.bob.com
Host: api.alice.com
Accept-Language: en-US
Connection: keep-alive
User-Agent: Mozilla/5.0...
(2).非简单请求
非简单请求的cors请求,会在正式通信之前,增加一次HTTP查询请求,称为“预检”请求。
博客地址:
http://www.ruanyifeng.com/blog/2016/04/cors.html