Chrome 无法携带跨站cookie的各种解决方案

同源策略的历史及对应的解决方案

当页面内发起请求时,会默认携带该域名下的cookie。

而cookie同源策略是指:除非当前域名和请求域名是同源,才会默认携带cookie。
这就导致,localhost直接请求测试环境的接口,比如 http://api.baidu.com,此时不会携带 cookie,从而导致登录失效的问题。

这一策略从chrome 80开始存在,而chrome 91升级,chrome 94再升级。

chrome 各个版本如何禁用同源cookie策略:

  • chrome < 91,可以通过在chrome 浏览器中打开chrome://flags/,设置 SameSiteByDefaultCookie 为 disable 即可。
    在这里插入图片描述

  • 91 <= chrome < 94 ,删除了该配置,需要手动增加启动参数 --args --disable-features=SameSiteByDefaultCookies。可以命令行启动或者在快捷方式上加这个参数
    在这里插入图片描述
    在这里插入图片描述

  • chrome 94 开始删除了启动参数的支持,那么该怎么解决呢?

三种解决方案

1、前后端代理成同一个域名

ngnix、whistle、fiddler、mitmproxy等转发工具,可以选择转发域名,转发接口,原理上均可行

2、前后端遵循Samesite=None,以实现允许跨站cookie

chrome允许跨站cookie携带,需要满足两个条件:

  • cookie需要标记为 SameSite=None; Secure
  • 前网站和后台服务协议都为https

所以本地需要改成https://,同时服务端配合将登录的返回头set-cookie上增加 SameSite=None; Secure

3、使用下面的 chrome 扩展

https://github.com/chirpmonster/chrome-cookie-extence

注意:使用这个扩展,要求登录请求的 set-cookie 必须要能成功,浏览器要求跨站的时候,set-cookie必须带 SameSite=None; Secure (不要求https) 。

如果没有这个标记,set-cookie 会失败,提示 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.

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神秘_博士

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值