【原创】Cors跨域资源共享;
1、W3c的标准规范;
2、兼容 >= IE10;
3、cache-control 不缓存POST请求;
4、预检 OPTIONS 请求和正常的请求一样,发送正常请求的请求头Request Headers,和请求体Request Body,只是不返回Response Body;
- Access-Control-Max-Age:缓存 **成功的** preflight的结果,
同样的请求,缓存有效期内不再发起options请求!除非请求头request Headers
或者请求体request Body信息改变;失败的 preflight 结果不会缓存;
未设置Access-Control-Max-Age 相当于 Access-Control-Max-Age:0;
5、分简单请求,非简单请求,如何区分,不赘述;GET请求在cache-control时效内,可以走缓存,不发起请求到服务器;
- 浏览器添加 origin 请求头信息;
-
5.1简单请求--成功
Acess-Control-Allow-Origin(*时不能兼容客户端的 withCredentials = true) Acess-Control-Allow-Headers(不能为 *,要枚举)
-
5.2非简单请求
-
5.2.1 非简单请求--成功
OPTIONS请求通过,或者在有效期内,即满足response Header中的 Acess-Control-Allow-Origin、Acess-Control-Allow-Headers Acess-Control-Allow-Origin(‘*’时不能兼容客户端的 withCredentials = true)、 Acess-Control-Allow-Headers(不能为 *,要枚举)
-
5.2.2 非简单请求--失败
OPTIONS请求未通过,即不满足response Header中的 Acess-Control-Allow-Origin、Acess-Control-Allow-Headers,** 失败的OPTIONS请求不缓存** ; Acess-Control-Allow-Origin(‘*’时不能兼容客户端的 withCredentials = true)、 Acess-Control-Allow-Headers(不能为 *,要枚举)
-
5.2.3 XHR跨域发送COOKIE(fetch设置参数即可)
a.客户端 withCredentials = true; b.服务器端需要设置 Access-Control-Allow-Credentials :true; c.服务器端需要设置 Access-Control-Allow-Origin:`当前客户端域名,不能为‘*’`; d.服务器域下的cookie才会被发送(目前试验结果是只有通过服务器响应头去设置浏览器的服务器域cookie);
-
网友评论