iframe 中 SameSite=Lax cookie 和 GET 请求的规则是什么?

What are the rules for SameSite=Lax cookies and GET request inside iframe?

用户在 site-a.com 上并且有一个带有 site-b.com 的 iframe。 site-b.com 向 site-a.com 发出 GET 请求(在 iframe 内)。用于跨站点 GET 到 site-a.com 的 Lax cookie 是否会随请求一起发送?

更清楚:

根据我在 Chrome 91 canary 中的观察,此 cookie 被阻止,而在 Chrome 88 中未被阻止。我认为只有 Lax+POST 有问题,但看起来也Lax+GET 现在在某些情况下被阻止。有没有information/spec。关于跨站点 GET+Lax cookies?

首先,从 site-b.com 到 site-a.com 的请求是一个 cross-site 请求。不管它是 GET 还是 POST,它位于两个不同的可注册域 (a.k.a.eTLD+1s) 之间的事实意味着它是跨站点的。

specification 允许 Lax cookie 与 跨站点 请求一起发送,仅当它们是 顶级请求 并且有一个 安全方法(GET,但不是 POST):

   *  If the cookie's same-site-flag is not "None", and the HTTP
      request is cross-site (as defined in Section 5.2) then exclude
      the cookie unless all of the following statements hold:

      1.  The same-site-flag is "Lax" or "Default".

      2.  The HTTP request's method is "safe".

      3.  The HTTP request's target browsing context is a top-level
          browsing context.

iframe 内的请求不是顶级 请求,因此无论请求是什么,Lax cookie 都不会与 iframe 上的跨站点请求一起发送方法是。

Chrome 曾经在此行为中有一个 bug,其中没有完全遵循顶级要求。 (过去,如果 iframe 及其所有祖先都匹配顶级,Chrome 会发送 Lax cookie。这是错误的,因为规范说它确实需要 be顶层。)你看到的是错误在 Chrome 90.

中修复后的正确行为