2012-08-11 13 views
1

報價從Opera documentation(第一個鏈接我已經找到了):即使Access-Control-Allow-Headers丟失,爲什麼CORS請求成功?

標準或自定義標題是 訪問控制允許報頭適當的值。爲了使跨源請求成功,其值必須與 Access-Control-Request-Headers標頭的值相匹配(或包含)。

我使用jQuery發送請求。如果我註釋掉setRequestHeader

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

它不應該工作,因爲服務器響應有:

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 

當客戶端請求

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 

我錯過了什麼?對不起,如果這是一個奇怪的問題,第一次與CORS對我來說......

+0

'Access-Control-Allow-Origin:*'表示資源可以通過任何域以跨站點方式訪問。 [你可以在MDN上閱讀更多關於這方面的內容。](https://developer.mozilla.org/en-US/docs/HTTP_access_control) – Ohgodwhy 2012-08-11 02:25:18

+0

@Ohgodwhy是的,但我正在討論'Access-Control-Allow-Headers '... – gremo 2012-08-11 02:29:22

回答

5

我想你誤解了Access-Control-Allow-Headers做什麼(措辭不佳)不起作用。它允許服務器告訴瀏覽器哪些頭文件是可接受的用於設置跨源XHR請求。

這並不意味着這些標題是強制。如果腳本沒有設置標題,請求仍然允許發生。

+0

姆姆..謝謝。這是Opera文檔中的一個重大錯誤?因爲「爲了使跨源請求成功,其值必須與Access-Control-Request-Headers標頭的值匹配。」這是說'確實'。 – gremo 2012-08-11 03:16:03

+0

我認爲它試圖說如果你的腳本試圖設置一個不在'Access-Control-Allow-Headers'允許的集合中的頭部,那麼請求就會失敗。 (雖然我想知道它是否真的會失敗或只是不發送標題。) – josh3736 2012-08-11 03:40:54

相關問題