两种请求
浏览器将CORS请求分为两类:简单请求(simple request)和非简单请求(not-so-simple request).
只要同时满足以下两大条件, 就属于简单请求
(1) 请求方法一下三种方法之一:
HEAD
GET
POST
(2)HTTP的头信息不超过提下几种字段:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type: 只限于三个值application/x-www-from-urlencoded、multipart/form-data、text/plain
凡是不同时满足上面两个条件, 就属于非正常请求。
浏览器对着两种请求的处理, 是不一样的。
- 简单请求和非简单请求的区别?
简单请求: 一次请求
非简单请求: 两次请求, 在发送数据之前会发生一次请求用于"预检", 只有"预检"通过后才在发送一次请求用于数据传输。
- 关于"预检"
- 请求方式:OPTIONS
- "预检"其实做检查, 检查如果通过则允许传输数据, 查不通过则不再发送真正想要发送的消息
- 如何"预检"
=> 如果复杂的请求是PUT等请求, 则服务器需要设置允许某请求, 否则"预检不通过"Access-Control-Request-Method
=> 如果复杂请求设置了请求头, 则服务端需要设置允许请求头, 否则"预检"不通过Access-Control-Request-Headers
案列
- 服务器1向服务器2要数据图解
- 简单请求解决方案
在服务器2的接口里设置个Access-Control-Allow-Origin
- 非简单请求
会发送两条请求, 一条options, 一条post
在服务器2的接口里设置个Access-Control-Allow-Headers