当浏览器发出了一个跨域的xhr的时候,浏览器会自动在请求头加上一些参数,
对于简单请求和非简单请求是不一样的,先看一下简单请求的定义:
(1) 请求方法是以下三种方法之一:
- HEAD
- GET
- POST
(2)HTTP的头信息不超出以下几种字段:
- Accept
- Content-Language
- Content-Type:只限于三个值application/x-www-form-urlencoded、multipart/form-data、text/plain
的时候是简单请求。
对于简单请求,浏览器直接在请求头上加一个Origin字段,说明本次请求来自哪个源(协议+域名+端口)
服务器根据这个值,决定是否,如果返回响应头没有Access-Control-Allow-Origin,那么会被前端xhronerror捕获(状态码是200)
否则是非简单请求,对于非简单请求,浏览器会发出预检请求 options是浏览器的preflight(预检)请求,
除了 Origin,至少还会多出两个字段 Access-Control-Request-Method、Access-Control-Request-Headers
(1)Access-Control-Request-Method
该字段是必须的,用来列出浏览器的CORS请求会用到哪个HTTP方法。
(2)Access-Control-Request-Headers
该字段是一个逗号分隔的字符串,指定浏览器CORS请求会额外发送的头信息字段。
与JSONP的对比
CORS与JSONP的使用目的相同,但是比JSONP更强大。
JSONP只支持GET请求。