zoukankan      html  css  js  c++  java
  • 关于cookie的 samesite和xHr 的withCredentials的思考

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

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

    1. Strict 仅允许一方请求携带 Cookie,即浏览器将只发送相同站点请求的 Cookie,即当前网页 URL 与请求目标 URL 完全一致。
    2. Lax 允许部分第三方请求携带 Cookie
    3. 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

  • 相关阅读:
    ThreadLocal的原理和使用场景
    sleep wait yield join方法的区别
    GC如何判断对象可以被回收
    双亲委派
    ConcurrentHashMap原理,jdk7和jdk8版本
    hashCode和equals
    接口和抽象类区别
    为什么局部内部类和匿名内部类只能访问局部final变量
    【GAN】基础GAN代码解析
    TF相关codna常用命令整理
  • 原文地址:https://www.cnblogs.com/iroading/p/13151848.html
Copyright © 2011-2022 走看看