我认为我误解了使用xmlhttprequest管理cookie。我有一个服务器响应javascript中的XMLHttpRequest
,我的服务器返回Allow-Control-Access-Origin
,Access-Control-Allow-Headers
,Access-Control-Expose-Headers
和Access-Control-Allow-Credentials
标头,其值正确。< / p>
我正在使用javascript在服务器上进行摘要身份验证,没问题,我收到来自服务器的WWW-Authenticate
标头,我处理并向服务器发送带有所有摘要响应的Authorization标头一切都好。
问题是,当摘要挑战成功时,我的服务器返回一个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标题?
答案 0 :(得分:16)
来自CORS规范http://www.w3.org/TR/cors/#make-a-request-steps:
每当应用make a request步骤时,从设置了手动重定向标志的源source origin获取请求URL,如果设置了omit credentials标志,则设置block cookies标志。使用方法请求方法,实体主体请求实体主体,包括作者请求标头,如果未设置省略凭证标志,则包括用户凭证。如果源origin是全局唯一标识符,则排除Referer标头。
正如您所说 - 如果您使用withCredentials
,则会通过浏览器添加Cookie。