为什么即使缺少Access-Control-Allow-Headers,CORS请求也会成功?

gre*_*emo 1 jquery http http-headers cors

Opera文档引用(我找到的第一个链接):

标准或自定义标头是Access-Control-Allow-Headers的适当值.要使跨源请求成功,其值必须匹配(或包含)Access-Control-Request-Headers标头的值.

我正在使用jQuery发送请求.如果我评论出来setRequestHeader:

$(function() {            
    $.ajax({
        url: 'http://silex.local/users',
        method: 'GET',
        beforeSend : function(req) {
            //req.setRequestHeader('Authorization', 'FID ds7sd6:32n8942b3672n2');
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

它应该不起作用,因为服务器响应:

HTTP/1.0 200 OK
Date: Sat, 11 Aug 2012 02:15:14 GMT
Server: Apache/2.2.22 (Win32) PHP/5.3.14
X-Powered-By: PHP/5.3.14
Cache-Control: no-cache
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE
Access-Control-Allow-Headers: Authorization
Connection: close
Content-Type: application/json; charset=utf-8
Run Code Online (Sandbox Code Playgroud)

客户请求时:

GET http://silex.local/users HTTP/1.1
Host: silex.local
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:14.0) Gecko/20100101 Firefox/14.0.1
Accept: */*
Accept-Language: it-it,it;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Proxy-Connection: keep-alive
Referer: http://localhost/test.html
Origin: http://localhost
Cache-Control: max-age=0
Run Code Online (Sandbox Code Playgroud)

我错过了什么?对不起,如果这是一个奇怪的问题,第一次使用CORS给我...

jos*_*736 5

我认为你误解了什么Access-Control-Allow-Headers(措辞不好的报价没有帮助).它允许服务器告诉浏览器哪些标头可以接受设置的跨源XHR请求.

这并不意味着这些标头是强制性的.如果脚本未设置标头,则仍允许该请求发生.