谁能通过一个很好的例子告诉我SameSite="Lax"和SameSite="Strict"之间有什么区别,因为我对这两者有点困惑?
问问题
24480 次
3 回答
99
Lax 允许在某些跨站点请求上发送 cookie,而 Strict 绝不允许在跨站点请求上发送 cookie。
Lax cookie可以跨站发送的情况必须满足以下两个条件:
- 请求必须是顶级导航。您可以认为这相当于 URL 栏中显示的 URL 发生变化,例如,用户单击链接以转到另一个站点。
- 请求方法必须是安全的(例如 GET 或 HEAD,但不是 POST)。
例如:
- 假设用户在 site-a.com 上并单击链接以转到 site-b.com。这是一个跨站点请求。这是一个顶级导航并且是一个 GET 请求,因此 Lax cookie 被发送到 site-b.com。但是,不会发送 Strict cookie,因为它毕竟是跨站点请求。
- 用户在 site-a.com 上,并且有一个 iframe,其中加载了 site-b.com。这是一个跨站点请求,但不是顶级导航(用户仍在 site-a.com 上,即加载 iframe 时 URL 栏不会改变)。因此,Lax 和 Strict cookie 都不会发送到 site-b.com。
- 用户位于向 site-b.com 发布表单的 site-a.com 上。这是一个跨站请求,但是方法(POST)不安全。它不符合 Lax cookie 跨站点传输的标准,因此 Lax 和 Strict cookie 都不会发送到 site-b.com
于 2020-01-30T23:10:24.740 回答
18
一张图片胜过千言万语。这是我的清晰图表,总结了您需要了解的有关 SameSite 属性的所有信息:
请注意,“具有 SameSite=None 的 cookie 现在还必须指定安全属性(它们需要安全上下文/HTTPS)”来源:MDN
资料来源:来自@chlily 上面的回答和谷歌关于 SameSite cookie 的博客
于 2020-10-10T05:20:51.670 回答
9
Strict不允许在跨站点请求或 iframe 上发送 cookie。 LAX 只允许 GET None允许所有请求。但 需要安全 ;
于 2020-03-27T13:48:47.630 回答