xmlhttprequest 和 set-cookie & cookie

Posted

技术标签:

【中文标题】xmlhttprequest 和 set-cookie & cookie【英文标题】:xmlhttprequest and set-cookie & cookie 【发布时间】:2012-06-14 04:16:44 【问题描述】:

我想我误解了使用 xmlhttprequest 管理 cookie。我有一个服务器响应 XMLHttpRequestjavascript 中创建的,我的服务器返回 Allow-Control-Access-OriginAccess-Control-Allow-HeadersAccess-Control-Expose-HeadersAccess-Control-Allow-Credentials 具有正确值的标头。

我正在使用 javascript 在服务器中进行摘要身份验证,这没问题,我从服务器接收到 WWW-Authenticate 标头,我处理并向服务器发送带有所有摘要响应和所有内容的授权标头好的。 问题是,当摘要挑战成功时,我的服务器返回一个 Set-Cookie 标头,我必须获取它并添加到我所有 xhr 请求的其余部分。 浏览器(使用 Chromium 和 Chrome)不允许我访问标题:

xhr.getResponseHeader("Set-Cookie");

好的,在XMLHTTPREQUEST Level 2 中它说:“返回响应中的所有标头,但字段名称为 Set-Cookie 或 Set-Cookie2 的标头除外” 好的,所以我不能接受,但是有什么方法?将 Chrome Api 用于 cookie(目前我没有读到关于它的注意事项),但我想尽可能采用标准方式。 与:

xhr.withCredentials = true;

表示浏览器会自动获取set-cookie并发送cookie headers??

【问题讨论】:

【参考方案1】:

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

每当应用发出请求的步骤时,从原始源源中获取请求 URL,并设置手动重定向标志,如果设置了省略凭据标志,则设置阻止 cookie 标志。使用方法请求方法,实体主体请求实体主体,包括作者请求标头,如果省略凭据标志未设置,则包括用户凭据。如果源源是全局唯一标识符,则排除 Referer 标头。

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

【讨论】:

您能否确认在这种情况下,他们将由站点 A(主页)生成和设置的 cookie 发送到站点 B(Ajax 目标)? 没有。只有那些来自域 B 的 cookie 才会被发送到那里。另一方面,Referer 将被发送,其中包含站点 A 的原始 URI - 如果您有一些 HTTP 参数 - 它们将对 B 站点可见。

以上是关于xmlhttprequest 和 set-cookie & cookie的主要内容,如果未能解决你的问题,请参考以下文章

ajax原理和XmlHttpRequest对象

XMLHttpRequest 和 Phonegap ... 是不是同源策略?

ajax原理和XmlHttpRequest对象

ajax学习篇XMLHttpRequest的创建和使用

ajax之XMLHttpRequest常用方法属性

AJAX和XMLHttpRequest之间的区别[重复]