【发布时间】:2012-04-07 11:53:51
【问题描述】:
w3.org CORS specification 明确指出在使用 CORS 发出预请求请求时应省略用户凭据:
排除用户凭据。
为什么谷歌浏览器忽略了这一点?
看看下面的代码。
var url = 'http://example.net/resources/test.php';
var xhr = new XMLHttpRequest();
xhr.open('PUT', url, true);
xhr.onreadystatechange = handler;
xhr.withCredentials = true;
xhr.send();
这是来自上述场景的请求标头。
OPTIONS /resources/test.php HTTP/1.1
Host: example.net
Connection: keep-alive
Access-Control-Request-Method: PUT
Origin: http://elsewhere.example.net
User-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.11 (KHTML, like Gecko) Ubuntu/11.10 Chromium/17.0.963.79 Chrome/17.0.963.79 Safari/535.11
Access-Control-Request-Headers: Origin
Accept: */*
Referer: http://elsewhere.example.net/cors-example.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Cookie: somecookies=here
如您所见,cookie(用户凭据)是发送的,尽管有 CORS 规范。这背后有什么原因吗?
【问题讨论】:
-
我今天才遇到这个问题,但同时我又发现了同样的问题并在bugs.chromium.org/p/chromium/issues/detail?id=775438报告了它
标签: google-chrome credentials cors