CORS的原理

CORS的原理是基于服务方授权的模式,也就是说提供服务的程序要主动通过CORS回应头来声明自己信任哪些源(协议+域名+端口)。 由于得到了服务方的授权,浏览器就可以放行来自这些域的请求了。

浏览器在发送请求时,会在 Header 中加上一个 origin(protocal + host + path + port) 字段,来标明这个请求是来自哪里。在服务端拿到这个请求之后,会对 origin 进行判断,如果是在允许范围内的请求,将会在 respones 返回的 Header 中加上:


Access-Control-Allow-Origin: origin

Access-Control-Allow-Credentials: true

Access-Control-Expose-Headers: something

(1)Access-Control-Allow-Origin

该字段是必须的。它的值要么是请求时Origin字段的值,要么是一个,表示接受任意域名的请求。

(2)Access-Control-Allow-Credentials

该字段可选。它的值是一个布尔值,表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求之中。设为true,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器。这个值也只能设为true,如果服务器不要浏览器发送Cookie,删除该字段即可。

(3)Access-Control-Expose-Headers

该字段可选。CORS请求时,XMLHttpRequest对象的getResponseHeader()方法只能拿到6个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必须在Access-Control-Expose-Headers里面指定。上面的例子指定,getResponseHeader('FooBar')可以返回FooBar字段的值。

所以,在服务端可以通过设置“Access-Control-Allow-Origin”来指定允许跨域访问的域名。这里有一个问题就是设置Access-Control-Allow-Origin只能配置 一个域名或者 。那么有多个域名允许访问但并不是允许所有访问怎么办呢。这个时候可以在获取到请求时,判断其域名是否允许访问,如果允许访问,动态的将Access-Control-Allow-Origin允许的域名设置为网络请求的域名。

你可能感兴趣的:(CORS的原理)