为什么Chrome会使用预先提供的CORS请求发送用户凭据?

时间:2012-03-22 21:00:16

标签: google-chrome credentials cors

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

正如您所看到的,尽管有CORS规范,但cookie(用户凭证)仍然是发送的。这背后有原因吗?

2 个答案:

答案 0 :(得分:1)

听起来像个臭虫。您可以向Google提交错误报告:new.crbug.com

答案 1 :(得分:0)

是的,有一个原因。您明确告诉XHR它应该通过设置属性来包含凭证:

xhr.withCredentials = true;

删除该行,Chrome应该在没有Cookie的情况下发出请求。