WEB跨域请求无法传递(携带)第三方Cookie的问题剖析(你一定不知道的SameSite)

一、前言

最近在实际开发过程中遇到一个关于跨域请求无法传递Cookie的问题。该场景大致为:我们在一个web页面a下(假如该页面的网址为a.csdn.com),然后再改页面中使用ajax请求跨域访问了一个服务器b(假如其域名为b.baidu.comm)的接口。这就是一个普通的跨域请求,在这个跨域请求中,我们期望页面a在请求服务器b的接口的时候,浏览器能够将服务器b下的cookie(baidu.com下的cookie)都携带上。这样服务器b再收到请求之后能够从cookie中获取一些C端用的信息,如pin等。大致图示如下。

我们都知道这种跨域请求默认是不会成功的,我们需要做如下两件事情,才能够确保跨域请求成功地同时携带上baidu.com下的Cookie。

1、需要在服务端B开启CORS,这样页面a的跨域请求才能够被正常处理。

2、需要web页面a在请求的参数中添加withCredentials=true属性,这样浏览器才会携带cookie到服务端B。

然而事实却不是这样,通过上述操作之后,当我们在跨域请的时候,请求能够正常达到服务端B,服务端B返回的数据浏览器端也能够正常处理。但是跨域请求的过程中浏览器没有携带Cookie到服务端B,导致部分基于C端用户信息的逻辑出错。

看到这里我也很纳闷,按照之前的经验通过上述两步处理之后。服务端B是可能能够拿到Cookie的。那么为什么这里没有传递Cookie去服务端呢?通过一些列Google操作,我终于找到了具体原因。接下来就给大家详细分析下具体原因。

二、根因分析

通过一些列Google之后,终于找到了为什么上述跨域场景下CORS和withCredentials=true都设置的场景下,Cookie仍然不传递的原因。

这是因为Google去年在Chrome开始支持Co

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

跳小闹成长记-跳爸

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

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

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

打赏作者

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

抵扣说明:

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

余额充值