大家好,我是念念!今天给大家介绍一下三方cookie相关的内容。本文将阐明:什么是三方cookie?什么是同站变更,它对我们的业务有何影响?当您拥有同一站点时,为什么需要同一方?文章首发于我的公众号:每年前端私教的三方cookie是什么?三方指的是非同一个站点。这个同站不同于同源协议中的origin,它的要求比较宽松。同源协议中的源定义为“协议+域名+端口”。如果有一处不同,则不认为是同源,但同一站点仅受域名限制,并不要求完全相同——只要“有效顶级域名+二级域名”即可name"相同,它们都被认为是同一个站点。有效的顶级域是由Mozilla维护的一个表,包括.com、.co.uk、.github.io等。所以ai.taobao.com和www.taobao.com在同一个站点上,因为它们的顶级一级域名(.com)+二级域名(.taobao)是一样的。既然知道什么是网站,那么就很容易区分了:打开开发者工具的应用,域名栏和当前域名的区别就是携带了三方cookie。三方cookie由浏览器自动携带。规则是“不认来源,只看目的”,下面会解释这句话的意思。首先,您需要了解如何发送cookie。服务器会将它们发送到浏览器。方法是在响应头中的set-cookie字段中包含一些配置属性。关键是domain域指定了cookie可以携带哪些域名以备后用。其值可以设置为当前服务器的父域名或自身。比如ai.taobao.com设置的cookie的域名可以是.taobao.com,所有设置值的子域名都可以使用,比如www.taobao.com。如果不设置,则默认为当前域名ai.taobao.com,只有您可以使用。子域名sub.ai.taobao.com不能用,适用范围小很多,所以一般设置。但是不能设置为跨站.baidu.com,也不能是顶级域名.com。其余属性如下:path:指定cookie以后使用时可以携带到合法域名的哪些URI。与domain类似,只能设置为当前路径的父路径或自身,设置值的所有子路径均可访问。expire/max-age:指定cookie的有效期,其中expire为绝对时间,max-age为相对时间,以秒为单位,当两者同时存在时,max-age优先级高;如果两者都不是,那么它就是一个会话级cookie,当用户关闭浏览器时它就会过期。设置Cookie:id=nian;过期=2022年8月30日星期三00:00:00GMT;Max-Age=3600secure:只能在HTTPS环境下传递,携带http-only:禁止客户端脚本通过document.cookie获取cookie,避免XSS攻击。还有下面会说明的same-site和same-partyCookie的携带。上面说了cookie的domain字段很重要。它指定请求携带哪些域名。请注意,这是指请求目的地的域名。比如我先通过responseheader在浏览器中设置一个cookie,域是.a.comset-cookie:id=nian;域名=.a.com;现在有三个请求:网页www.a.com/index.html的前端页面,请求接口www.b.com/api网页www.b.com/index.html,请求接口www.a.com/api网页www.a.com/index.对于html的前端页面,请求接口www.a.com/api有点混乱。你可以停下来思考10秒钟。哪个请求会带上之前设置的cookie?答案是2和3都会带cookie,因为cookie访问规则是看请求的目的地,而2和3的请求是www.a.com/api匹配domain=.a.com规则.这就是“不认来源,只看目的”的意思。不管请求的来源在哪里,只要请求的目的是a站,都会携带cookie。通过这个案例,我们也可以回过头来看:3的情况称为第一方cookie,2的情况称为第三方cookie。限制携带三方cookies“不认来源,只看目的”的规则将在2020年被打破。这一变化体现在浏览器设置same-site:lax为默认属性。chrome的运行比较流畅。目前可以手动设置same-site:none来恢复之前的规则。但是如果在safari中这样设置,就会被认为是same-site:strict。你可以看到所有的第一方cookies都在safari中使用。直观的体验就是登录天猫后,打开淘宝需要重新登录。一次。也就是说,现在cookies的使用是“源头与目的并重”。SameSite上面提到的same-site是cookie的一个属性,限制第三方cookie的携带,其值有none、strict、lax三个值。严格意味着完全禁止三方cookie。这是最严格的保护,可以避免被CSRF攻击,但是缺点也很明显。天猫、淘宝等属于同一实体的网站需要重复登录;none表示完全没有限制。即以往“不认来源,只看用途”的cookie访问原则;松懈是一种妥协。在某些情况下,它会限制第三方cookies的携带,在某些情况下会被允许。这也是浏览器(包括safari)的默认值。在Safari中,same-site的默认值是lax。如果设置为same-site:none,会适得其反。它被视为严格的。SameSite的修改可以这样理解。浏览器调整same-site的默认值从none到laxsame-site:lax的具体规则如下:typeexample是否发送链接
