XMLHttpRequest和Set-Cookie & Cookie

18

我觉得我误解了使用XMLHttpRequest处理cookie的方式。我有一个服务器响应javascript中的XMLHttpRequest,我的服务器返回正确的值与Allow-Control-Access-OriginAccess-Control-Allow-HeadersAccess-Control-Expose-HeadersAccess-Control-Allow-Credentials头部。

在JavaScript中,我正在使用Digest Authenticate连接到服务器,这方面没有问题,我从服务器接收到了WWW-Authenticate头部,我处理并发送了带有所有digest-response的Authorization头部,一切都很顺利。

但是问题是,当digest-challenge成功后,我的服务器会返回一个Set-Cookie头部,我必须将其获取并添加到所有xhr请求的其余部分。然而,浏览器(使用Chromium和Chrome)不允许我通过以下方式访问头部:

xhr.getResponseHeader("Set-Cookie");

好的,在XMLHTTPREQUEST Level 2中写道:"返回响应中除了那些字段名为Set-Cookie或Set-Cookie2的所有头部" 好的,所以我不能使用它,但有什么其他方法吗?可以使用Chrome Api来处理Cookie(目前我还没有阅读相关内容),但我希望尽可能地使用标准方法。

xhr.withCredentials = true;

这意味着浏览器会自动获取设置的cookie并在cookie头中发送吗?

1个回答

16

来自CORS规范http://www.w3.org/TR/cors/#make-a-request-steps

每当应用“发起请求”步骤时,使用手动重定向标志和阻止cookie标志(如果设置了省略凭据标志)从源始来源获取请求URL。使用请求方法、请求实体正文、包括作者请求头的用户凭据(如果未设置省略凭据标志)。如果源始来源是全局唯一标识符,则排除引用者标头。

正如您所说 - 如果使用withCredentials,则浏览器会添加cookie。


你能确认在这种情况下,他们是否正在发送由A站点(主页)生成和设置的cookie到B站点(Ajax目标)吗? - Kirill Kobelev
不会发送从B域名发起的Cookie到那里。另一方面,“Referer”将包含站点A的原始URI - 如果您有一些HTTP参数-它们将对B站点可见。 - Artem Oboturov
哎呀,链接坏了。:( - ciis0
新规范中似乎没有直接等效的内容,但档案链接是https://web.archive.org/web/20120603082313/http://www.w3.org/TR/cors/#make-a-request-steps。 - ciis0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接