Access-Control-Allow-Credentials报头到底做什么?

我试图理解如何使用CORS和困惑的Access-Control-Allow-Credentials头做什么。

的文档

表示是否可以公开请求的响应

.当凭据标志为true时

但我不明白“暴露”是什么意思。

有人能解释一下这个头被设置为真(连同凭据标志被设置为真)实际上是做什么的吗?

155426 次浏览

缺省情况下,CORS不包括跨源请求的cookie。这与其他交叉起源技术(如JSON-P)不同。JSON-P总是在请求中包含cookie,这种行为会导致一类名为跨站请求伪造或CSRF的漏洞。

为了减少CORS中出现CSRF漏洞的几率,CORS要求服务器和客户端都确认在请求中包含cookie是可以的。这样做使cookie成为一个主动的决定,而不是在没有任何控制的情况下被动地发生。

客户端代码必须XMLHttpRequest上的withCredentials属性设置为true以授予权限。

然而,光有这个标头是不够的。服务器必须响应Access-Control-Allow-Credentials报头。将此报头响应到true意味着服务器允许跨源请求包含cookie(或其他用户凭证)。

如果你想让跨源凭据请求工作,你还需要确保您的浏览器没有阻止第三方cookie

请注意,无论您是发出同源请求还是跨源请求,都需要保护您的站点不受CSRF的影响(特别是如果您的请求包含cookie)。