SameSite="Lax" 和 SameSite="Strict" 有什么区别?

What is difference between SameSite="Lax" and SameSite="Strict"?

谁能告诉我 SameSite="Lax"SameSite="Strict" 有什么区别一个很好的例子,因为我对这两者有点困惑?

Lax 允许在某些跨站点请求中发送 cookie,而 Strict 则不允许在跨站点请求中发送 cookie。

可以跨站发送Lax cookie的情况必须同时满足以下两种情况:

  1. 请求必须是顶级导航。您可以认为这等同于 URL 栏中显示的 URL 发生变化,例如用户单击 link 转到另一个站点。
  2. 请求方法必须是安全的(例如 GET 或 HEAD,但不是 POST)。

例如:

  1. 假设用户在站点-a.com 上并单击link 转到站点-b.com。这是一个跨站请求。这是一个顶级导航并且是一个 GET 请求,所以 Lax cookies 被发送到 site-b.com。不过Strict cookies并没有发送,因为毕竟是跨站请求。
  2. 用户在 site-a.com 上,并且有一个加载了 site-b.com 的 iframe。这是一个跨站点请求,但它不是顶级导航(用户仍在站点上-a.com,即加载 iframe 时 URL 栏不会改变)。因此,无论是 Lax 还是 Strict cookie 都不会发送到站点-b.com.
  3. 用户在站点-a.com,POST是站点-b.com 的表单。这是一个跨站请求,但是方法(POST)是不安全的。它不符合跨站点的 Lax cookie 的标准,因此 Lax 和 Strict cookie 都不会发送到站点-b.com

严格 不允许在跨站点请求或 iframe 上发送 cookie。 LAX 只允许 GET None 允许所有请求。但 secure 是必需的;

一图胜千言。这是我的清晰图表,它总结了您需要了解的有关 SameSite 属性的所有信息:

请注意,“具有 SameSite=None 的 cookie 现在还必须指定安全属性(它们需要安全 context/HTTPS)”来源:MDN

来源:来自@chlily 上面的回答和 blog from Google about SameSite cookies

奖金:difference between same-site and same-origin from Google's blog