Chrome 跨域 请求不携带cookie

一个月没动的项目,今天突然需要优化一个功能,项目启动,美滋滋的 localhost:8082访问前端页面,登录成功,

访问数据页面,报未登录

一脸懵逼,一个月前好好的项目,突然就出问题了,查看下请求发现没有携带cookie

异常情况,没有携带cookie

 

正常访问 携带cookie

 

一脸懵逼的找来了搭建项目的大佬,好像也不清楚,没法自己研究吧,发现浏览器console中有这么个提示

Indicate whether to send a cookie in a cross-site request by specifying its SameSite attribute

大概意思就是 跨域问题了,之前没有了解过 samesite , 度娘一下 samesite = Lax,

参考http://www.ruanyifeng.com/blog/2019/09/cookie-samesite.html

samesite 是chrome推出的针对cookie的新属性,有三种格式

1、Strict最为严格,完全禁止第三方 Cookie,跨站点时,任何情况下都不会发送 Cookie。

2、Lax规则稍稍放宽,大多数情况也是不发送第三方 Cookie,但是导航到目标网址的 Get 请求除外

3、Chrome 计划将Lax变为默认设置。这时,网站可以选择显式关闭SameSite属性,将其设为None。不过,前提是必须同时设置Secure属性(Cookie 只能通过 HTTPS 协议发送),否则无效

 

根据排查,尝试了2种解决办法,以及一种复杂的未实现的解决办法

1、访问的 localhost:8082改为本机ip,和后端的访问ip一致

问题: localhost:8082 -> 192.168.1.111:6010/prod/list   -> 无法正常访问

改为 : 192.168.1.111:8082 -> 192.168.1.111:6010/prod/list    -> 正常访问

这种只是尝试了一下,居然可以,原理不太清楚

2、最直接的,禁用这个属性

再次测试

localhost:8082 -> 192.168.1.111:6010/prod/list   -> 正常访问

3、这个就比较复杂了,没有测试

后端:

 @Bean public CookieSerializer httpSessionIdResolver(){ 
    DefaultCookieSerializer   cookieSerializer = new DefaultCookieSerializer();                                    
    cookieSerializer.setCookieName("token"); 
    cookieSerializer.setUseHttpOnlyCookie(false); 
    cookieSerializer.setSameSite(null);  
    return cookieSerializer; 
}
response.setHeader("Access-Control-Allow-Credentials", "true");

前端:

xhrFields: {
    withCredentials: true
}

问题解决,畅快啊

参考资料:

https://www.chromestatus.com/feature/5088147346030592

https://www.chromestatus.com/feature/5633521622188032

http://www.ruanyifeng.com/blog/2019/09/cookie-samesite.html

https://blog.csdn.net/qq_37060233/article/details/86595102 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值