Access-Control-Allow-Credentials 有什么意义?

What's the point of Access-Control-Allow-Credentials?

发送 cookie 的默认值为 SameSite=Lax,这意味着发送 cookie 用于 GET 请求,但阻止用于 POST。

对于跨源 GET 请求,由于 Same-Origin-Policy,响应被阻止,除非响应包含 Access-Control-Allow-Origin

为什么 Access-Control-Allow-Origin 不够?

为什么你会想要 return Access-Control-Allow-Origin: someDomain.com 而不是 returning Access-Control-Allow-Credentials

为什么允许来自受信任域的跨源 GET 请求,但仅在发送 cookie 时才阻止响应?

允许跨源共享在存在 cookie 的情况下风险更大,因为这可能会向恶意脚本泄露用户的私人信息。如果没有 cookie,脚本只能访问 public 信息——与从任何计算机导航到 URL 即可访问的信息相同。

因此 Access-Control-Allow-Credentials 的存在标志着一个重要的安全转折点,并有效区分共享 public 和私人信息。

例如,假设您有一个正在分发股票行情数据的 API,并且您希望允许来自其他站点的脚本访问此 API。 CORS 是必需的,因为同源策略否则会阻止这些脚本查看数据。不过,不需要 cookie。因此,该站点可以简单地使用 * 代替 Access-Control-Allow-Origin 并完成。没有共享任何私人数据的风险。

相比之下,想要启用用户特定数据共享的站点必须通过将 Access-Control-Allow-Credentials 设置为 true 来选择加入。此外,该站点被迫指定允许的特定站点,因为在这种情况下 *Access-Control-Allow-Origin 无效。