cookie的 samesite和xHr 的withCredentials的作用

谷歌在Chrome 80版本改变了cookie的samesite默认值,在此一起加深下理解。

一、首先简要说下samesite的几个值。

Strict 仅允许一方请求携带 Cookie,即浏览器将只发送相同站点请求的 Cookie,即当前网页 URL 与请求目标 URL 完全一致。
Lax 允许部分第三方请求携带 Cookie
None 无论是否跨站都会发送 Cookie
  之前默认是 None 的,Chrome80 后默认是 Lax。如果Chrome80后想要将其设置为None,需要同时将secure属性设置为true。这也意味着你的后端服务域名必需使用https协议访问,否则 None是无效的。

二、其次谈下 xhr中的cookie,在同域时cookie默认会发送,withCredentials属性此时是设为false也是无效的;但在跨域时,withCredentials默认为false,是不发送cookie的,设为 true 即可在跨域时 也能发送cookie;

三、此时说下 跨域和跨站 这两个是不同的定义。

1. 首先要理解的一点就是跨站和跨域是不同的。同站(same-site)/跨站(cross-site)」和第一方(first-party)/第三方(third-party)是等价的。但是与浏览器同源策略(SOP)中的「同源(same-origin)/跨域(cross-origin)」是完全不同的概念。

同源策略的同源是指两个 URL 的协议/主机名/端口一致。例如,https://www.taobao.com/pages/…,它的协议是 https,主机名是 www.taobao.com,端口是 443。

同源策略作为浏览器的安全基石,其「同源」判断是比较严格的,相对而言,Cookie中的「同站」判断就比较宽松:只要两个 URL 的 eTLD+1 相同即可,不需要考虑协议和端口。其中,eTLD 表示有效顶级域名,注册于 Mozilla 维护的公共后缀列表(Public      Suffix List)中,例如,.com、.co.uk、.github.io 等。eTLD+1 则表示,有效顶级域名+二级域名,例如 taobao.com 等。

举几个例子,www.taobao.com 和 www.baidu.com 是跨站,www.a.taobao.com 和 www.b.taobao.com 是同站,a.github.io 和 b.github.io 是跨站(注意是跨站)。

2.根据 跨域 和 跨站 定义的 不同,我们可以知道 跨站一定跨域,但是跨域不一定跨站。

四、最后说下

那么是否存在一种情况,withCredentials属性值和samesite值会出现冲突,此时谁的权重更高呢?答案是存在的,此时以samesite为主。举个例子:

在a.demo2.com域名下,ajax请求a.demo.com的api,此时是跨站 且跨域 的,需要设置withCredentials才能带上cookie,但如果此时cookie中的samesite值为Lax或Strict,此ajax请求是不能携带cookie的。

五、具体关于samesite和withCredentials的知识可以查看参考文章

参考文章:
withCredentials

samesite1

samesite2

    [cookie](https://zhuanlan.zhihu.com/p/103187034)

转自:https://www.cnblogs.com/iroading/p/13151848.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 要通过xhr获取cookie,可以使用xhr.getResponseHeader("Set-Cookie")来获取响应头中的cookie信息。在发送请求时,可以使用xhr.setRequestHeader("Set-Cookie", "cookie值")来设置请求头中的cookie。需要注意的是,cookie值需要进行URI编码,可以使用encodeURIComponent()函数进行编码,而在获取到cookie后,如果需要在客户端保存cookie,可以使用document.cookie = "cookie值"来手动插入cookie。\[1\]另外,如果在后续的请求中没有携带cookie的内容,可能是由于路径的问题。服务端可能配置了只有特定路径下的请求才能携带cookie,可以尝试将路径配置改为服务器的IP地址加端口号来解决这个问题。\[2\]总结来说,通过设置请求头和获取响应头中的cookie信息,可以实现xhr获取cookie的功能。\[3\] #### 引用[.reference_title] - *1* *3* [服务端修改Cookie——跨域cookie发送机——通信加密——异或加密](https://blog.csdn.net/m0_46672781/article/details/126234878)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [跨域导致无法获取cookie](https://blog.csdn.net/weixin_30388677/article/details/97156296)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值