浏览器中 XMLHttpRequest lvl 2 的 withCredentials 标志的行为
Posted
技术标签:
【中文标题】浏览器中 XMLHttpRequest lvl 2 的 withCredentials 标志的行为【英文标题】:Behaviour of withCredentials flag of XMLHttpRequest lvl 2 in browser 【发布时间】:2012-06-14 17:33:36 【问题描述】:我正在尝试在 CORS 环境中的 XMLHttpRequest 中设置 cookie,我在 Set-Cookie 标头中对我的服务器(使用 Restlet 开发)的最后一次调用中收到了 cookie。由于我无法读取此标头,因此我必须将控制权留给浏览器(在本例中为 Chrome),所有对服务器的请求都必须在 Cookie 标头中包含相同的值(第一个请求中的接收 cookie)。 我必须在第一次调用中将 withCredentials (并在服务器中设置 allow-credentials 标头)放在 xhr 请求中吗?此标志将获取 Set-Cookie 并在 Cookie 标头上放入下一个 xhr 请求?
有人可以澄清浏览器中 withCredentials 标志的行为吗?和其他问题,在 cors 中我可以访问 document.cookie 来设置它吗? (如果我可以 setRequestHeader("Cookie", value))????
【问题讨论】:
我已经得出结论,我不能使用 withCredentials 标志,我正在使用摘要身份验证,并且我的服务器向我发送了一个 cookie,以便在其余的 ajax 调用中发送。如果我设置为 true withCredentials 浏览器使用它自己的身份验证实现(显示登录窗口)。我不会使用 withCredentials,而是实现一个自定义 http 标头来发送 cookie 并使用我的 javascript api 处理它。 【参考方案1】:您可能遇到了预检请求问题。如果您添加额外的标头或使用 withCredentials 浏览器将首先尝试使用 OPTIONS HTTP 动词发出预检请求 (http://www.w3.org/TR/cors/#cross-origin-request-with-preflight-0)。在 Preflight 中删除凭据(包括 cookie) - 如果是这种情况,请检查 Chrome 网络面板。
【讨论】:
以上是关于浏览器中 XMLHttpRequest lvl 2 的 withCredentials 标志的行为的主要内容,如果未能解决你的问题,请参考以下文章