2012-02-27 65 views
4

經典「原因...不被訪問控制允許來源」問題。兩臺機器爲同一網站提供內容。當機器A通​​過jquery執行$('#main').load('link_to_resource_on_B')時,機器B用mod_python提供內容,並添加Access-Control-Allow-Origin: *標題。但由於某種原因,這仍然不起作用。我在Chrome,Safari和Internet Explorer上測試了這一點。我通過命令行來檢查響應頭,看起來Access-Control-Allow-Origin: *已成功地從B頭看到。我可能會錯過什麼?訪問控制允許來源:*不工作?

$ telnet localhost 80 
Trying ::1... 
Trying 127.0.0.1... 
Connected to localhost. 
Escape character is '^]'. 
GET /tests/python/test/env HTTP/1.1 
host: 10.0.1.10 

HTTP/1.1 200 OK 
Date: Mon, 27 Feb 2012 02:05:33 GMT 
Server: Apache/2.2.20 (Ubuntu) 
Access-Control-Allow-Origin: * 
Vary: Accept-Encoding 
Transfer-Encoding: chunked 
Content-Type: text/html 
+0

是否有客戶端設置的任何自定義標頭?自定義標頭(或非GET HTTP方法)可能觸發預檢請求,這需要額外的處理。 – monsur 2012-02-27 17:36:36

+0

感謝您的提示,@monsur。你是對的,這是OPTION標題,並沒有像處理它那樣處理。一些研究也告訴我,我的jquery太舊了。較新的jQuery(自1.5.2開始)故意避免使用客戶頭。所以歸結起來,我升級了我的jquery,而我的頭痛消失了。 對於那些遭受同樣症狀的人來說,這個鏈接爲我提供了啓蒙的後半部分。 [http://remysharp.com/2011/04/21/getting-cors-working/](http://remysharp.com/2011/04/21/getting-cors-working/) – user1170717 2012-02-28 07:19:39

+0

@ josh3736,謝謝幫助我格式化我的第一篇文章。那是我的第一篇文章。下一次會知道該怎麼做。 – user1170717 2012-02-28 07:26:12

回答

4

啓用訪問控制允許來源在響應標題是不夠的。服務器端實施應該爲pre-flight OPTIONS request提供適當的處理。

Access-Control-Allow-Origin: * 
Access-Control-Allow-Methods: GET, POST 

其他HTTP頭如接入控制允許集管可能也需要在殼體非標準HTTP標頭OPTIONS響應中被使用:具體地講,下面的HTTP標頭必須在OPTIONS響應被設置你的環境。

請記住,訪問控制允許來源:* HTTP標頭還必須設置在以下GET & POST響應中。

相關問題