9.CORS

2020-07-03  本文已影响0人  原来哥哥是万家灯火
  1. cors是浏览器跨域的一种规范,规定的跨域方案:通过一系列http请求头去控制跨域行为。

  2. 将请求分为两类:简单请求(GET\HEAD\POST)、预检请求(可以粗略地描述成可能对服务器数据造成影响的请求)。


    简单请求的满足条件

3.简单请求过程如下:

4.预检请求(preflight)的过程如下:

只有前三个字段是控制预检是否通过的,即实际请求能否发起。后三个字段是控制实际请求发起之后的行为的。尤其是最后一个Allow-Credentials,预检通过后它无论是何值实际请求都会发起,只不过如果带了认证信息(如何携带认证信息看文末),而Allow-Credentialsfalse的话,实际请求的相应结果会被浏览器拦截,和上面简单请求的响应被拦截一样
前三个字段的条件满足之后,预检通过,随即发起实际请求
前三个字段的条件未满足,预检失败,实际请求被拦截,浏览器报错如图



5.附:如何携带认证信息?

Fetch 与 CORS,可以使用 HTTP cookies 和 HTTP 认证信息发送身份凭证。一般而言,对于跨域 XMLHttpRequestFetch 请求,浏览器不会发送身份凭证信息。如果要发送凭证信息,需要设置 XMLHttpRequest 的某个特殊标志位。

如果要携带cookie的话,不能手动在请求头里设置cookie,浏览器会报错的。


手动设置cookie报错
如果是想带上cookie,需要设置xhr.withCredentials = true;

设置好之后,如果本站有cookie存在,请求的时候就会自动带上了


参考文献:

MDN HTTP访问控制(CORS)

上一篇 下一篇

猜你喜欢

热点阅读