CORS跨域请求分为简单请求和复杂请求。
1. 简单请求:
满足一下两个条件的请求。
(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
2. 复杂请求:
非简单请求就是复杂请求。
非简单请求是那种对服务器有特殊要求的请求,比如请求方法是PUT
或DELETE
,或者Content-Type
字段的类型是application/json
。
非简单请求的CORS请求,会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight)。
预检请求为OPTIONS请求,用于向服务器请求权限信息的。
预检请求被成功响应后,才会发出真实请求,携带真实数据。
3. CORS与cookies:
上面说到,CORS请求默认不发送Cookie和HTTP认证信息。如果要把Cookie发到服务器,一方面要服务器同意,指定Access-Control-Allow-Credentials
字段。
Access-Control-Allow-Credentials: true
另一方面,开发者必须在AJAX请求中打开withCredentials
属性。
var xhr = new XMLHttpRequest(); xhr.withCredentials = true;
//XMLHttpRequest level2才有withCredentials属性
4. 减少预检请求次数
服务端设置Access-Control-Max-Age可以将预检请求进行客户端缓存,减少请求次数
具体可以参考:http://www.ruanyifeng.com/blog/2016/04/cors.html
时间: 2024-10-20 12:18:49