跨域 SameSite secure

代码情况:
在这里插入图片描述

问题描述:
1、在 chrome 上, pdf预览失败,报错500,可是新开标签页,把请求地址放到地址栏里进行请求,又能获取到相应的数据;
在 火狐浏览器 均能正常显示。

2、页面内嵌Iframe,可iframe自动跳转到登录页,不能到达目标页面,但是把url单独放在新的地址栏又能到。

经对比发现
1.页面内报错的请求Content-Type 为 application/json;charset=UTF-8 ;而标签内的能够正常返回的Content-Type为 application/pdf;charset=UTF-8 ; 向后端确认其返回的 Content-Type 为 application/pdf;
2.报错的请求 没有发送 cookie 给后端。

解析:
1、Chrome 51 开始,浏览器的 Cookie 新增加了一个SameSite属性,用来防止 CSRF 攻击和用户追踪;Cookie 的SameSite属性用来限制第三方 Cookie,从而减少安全风险。一般默认设置为 Lax ;
在上面代码中用到了 ; 且iframe地址和pdf文件地址不一样,已经涉及到跨域,chrome中的samesite属性就把本身的cookie给拦截了,造成上面这种情况的发生。
在这里插入图片描述2、火狐96.01版本也开始这种默认了,为了安全,浏览器会阻止跨域传cookie,从而获取不到登录相关信息,从而跳转到登录页面。(当然这种情况还有一种可能是网络流量限制,可以通过连接手机热点排查,如果连接手机热点能够正常访问,而连接公司网络后就时而正常,时而凉凉,那就有问题了(2022.01.21亲躺。。))。

解决方案:
方案一: 直接关闭 samesite 功能就行,
复制 chrome://flags/#same-site-by-default-cookies 到地址栏,设置 SameSite by default cookies 为 disabled,就能解决这个问题。
在这里插入图片描述
火狐浏览器 输入 about:config, 然后把下面俩 true 改成 false 清除缓存重启就ok了。(亲测ok, 2021.01.21)

about:config

在这里插入图片描述

方案二:js代码设置禁用 SameSite。(这个方案的前提是请求为https协议,我没实际操作就不贴代码了)

方案三:如果是https, 可在nginx配置 samesite 即可。(2022.01.21)

 proxy_cookie_path / "/; httponly; secure; SameSite=None";

事后回顾(圣贤时刻):
祖传的代码突然失灵,前后端猜忌不断,到底是什么导致隔壁王二嫂日渐迷人,愈加销魂,不可描述?花开两枝,各表一朵,咱先看看这个过程的一些感悟。
1.控制台的各种报错都值得重视,特别是红色部分,我最开始想的是先解决pdf预览不成功,报错500的问题,最后实在没办法了,才考虑前面的那个报错。
2.有时候代码都没动过,不代表着问题就与你无关。时代在往前走,你必须得跟上。

参考地址:
Cookie 的 SameSite 属性
据说在2020.02.17日 chrome 将samesite的默认值设置为Lax;(https://www.chromium.org/updates/same-site)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值