Set-Cookie字段

141 阅读1分钟
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly

属性解释

cookie跨域

普通跨域

  • 请求方法包括GETHEADPOST
  • response header里面不能包含cors安全header以外的header。
  • Content-Type 只限于text/plainmultipart/form-dataapplication/x-www-form-urlencoded

解决办法

  1. 需要在返回的response header里面带上Access-Control-Allow-Origin这个heade
  2. 这里要注意,浏览器不是在请求阶段就对请求进行拦截,而是正常发出请求,拿到服务端的响应之后
  3. 开始查看响应header里面有没有Access-Control-Allow-Origin这个header,如果没有,响应的结果就不会到js那里去。

非普通跨域

非简单请求,之前允许所有域名跨域访问是被禁止的。所以还是要修改Access-Control-Allow-Origin特定的请求域名。在开发模式下,可能是http://localhost:3000之类的。

带cookie的跨域

浏览器发起跨域请求的时候,是不会主动带上cookie的,如果一个请求需要cookie,需要开发者设置一个选项,credentials 以fetch api为例

fetch('http://baidu.com:3000', { // ... credentials: true })

sameSite

  1. sameSite是为了防止csrf攻击而产生的属性
  2. 由于我们需要在请求中带上cookie,所以需要在set-cookie时将cookie的sameSite设置为none; 又由于将sameSite设置为none时,也需要将Secure设置上,所以请求需要基于https;