CORS简介
CORS是跨源资源分享(Cross-Origin Resource Sharing)的缩写。它是W3C标准,是跨源AJAX请求的根本解决方法。相比JSONP只能发GET请求,CORS允许任何类型的请求。
浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。
CORS使用方法
CORS通信过程,都是浏览器自动完成,不需要改动前端代码。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息(Origin,Access-Control-Request-Method,Access-Control-Request-Headers),对于复杂请求会先进行一次预检请求,然后再正常请求。服务端收到请求后响应头中增加Access-Control-Allow-Origin字段,浏览器判断当前域名属于被允许的范围时则正常处理。
简单请求-基本流程
对于简单请求,浏览器直接发出CORS请求。具体来说,就是在头信息之中,增加一个Origin字段。浏览器发现这次跨源AJAX请求是简单请求,就自动在头信息之中,添加一个Origin字段。
如果Origin指定的源,不在许可范围内,服务器会返回一个正常的HTTP回应。浏览器发现,这个回应的头信息没有包含Access-Control-Allow-Origin字段,就知道出错了,从而抛出一个错误,被XMLHttpRequest的onerror回调函数捕获。注意,这种错误无法通过状态码识别,因为HTTP回应的状态码有可能是200。
如果Origin指定的域名在许可范围内,服务器返回的响应,会多出几个以access-Control开头的字段:
Access-Control-Allow-Origin: http://api.bob.com
Access-Control-Allow-Credentials: true
**其他不定**
想要请求中携带cookie,需要对xhr设置withCredentials属性为true。