美文网首页Front End
[FE] Chrome 跨域请求失败:This Set-Cook

[FE] Chrome 跨域请求失败:This Set-Cook

作者: 何幻 | 来源:发表于2021-03-22 12:36 被阅读0次

问题

Chrome 更新到 80 以后,本地发起的跨域请求失败了。

This Set-Cookie didn't specify a "SameSite" attribute, was defaulted to "SameSite=Lax", and was blocked because it came from a cross-site response which was not the response to a top-level navigation. This response is considered cross-site because the URL has a different scheme than the current site.

CORS 相关的设置都是好的,

access-control-allow-credentials: true
access-control-allow-origin: http://local.xxx.com:3000  // xxx 是我故意打码的,本例中是本地的访问域名

复制 curl 如下,发现并没有携带 cookie 发送请求,


curl 'https://api.xxx.com/...' \
  -H 'authority: api.xxx.com' \
  -H 'sec-ch-ua: "Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"' \
  -H 'accept: application/json, text/plain, */*' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36' \
  -H 'origin: http://local.xxx.com:3000' \
  -H 'sec-fetch-site: cross-site' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-dest: empty' \
  -H 'referer: http://local.xxx.com:3000/' \
  -H 'accept-language: zh-CN,zh;q=0.9' \
  --compressed

查了一下资料发现是 Chrome 80 对 SameSite 为空时的 默认值 设置变更了。

以前 None默认值,但最近的浏览器版本将 Lax 作为默认值
以便对某些类型的跨站请求伪造 (CSRF) 攻击具有相当强的防御能力。

方案

打开 Chrome,设置 SameSite by default cookiesDisabled,然后 重启 Chrome 就好了。

chrome://flags/#same-site-by-default-cookies


参考

MDN: SameSite cookies
MDN: CORS
MDN: CSRF

相关文章

  • [FE] Chrome 跨域请求失败:This Set-Cook

    问题 Chrome 更新到 80 以后,本地发起的跨域请求失败了。 This Set-Cookie didn't ...

  • Chrome 关闭 web-security 屏蔽跨域检测用于调

    正常模式下在 Chrome 下进行 API 请求会进行跨域检测,检测失败会引起 CORS 错误: 开发时由于调试等...

  • ajax跨域相关学习

    1.跨域请求失败产生的原因1.1.浏览器限制1.2.xhr(XMLHttpRequest)请求1.3.跨域(不同域...

  • AJAX出现两次请求 options和get|post

    跨域请求 允许跨域请求 preflighted request预请求(options) 跨域请求 XMLHttpR...

  • axios发送俩次请求的原因

    其实跨域分为简单跨域请求和复杂跨域请求 简单跨域请求是不会发送options请求的 复杂跨域请求会发送一个预检请求...

  • layui跨域问题

    在使用layui的ajax请求跨域时,发现总是提示失败 打开f12,找到跨域请求,把filter上的xhr转到al...

  • 用express实现CORS跨域

    跨域请求头 cors express 跨域请求

  • 详解js跨域问题

    跨域失败 当使用jsonp跨域时, 1:请求必须是GET 2:python 写的webservice返回的格式是J...

  • 跨域

    1、跨域是什么 域指的是域名,向一个域发送请求,如果请求的域和当前域是不同域,就叫跨域;不同域之间的请求就叫跨域请...

  • 前端ajax实现和跨域实现

    下面是用chrome实现ajax请求,并对ajax中get和post请求进行封装,最后对跨域请求的前端处理本文用的...

网友评论

    本文标题:[FE] Chrome 跨域请求失败:This Set-Cook

    本文链接:https://www.haomeiwen.com/subject/sbrzcltx.html