我瞭解CORS以及如何在服務器響應中設置適當的Access-Control- *標題。我發現的問題是,即使我的服務器使用Access-Control-Allow-Origin:*
進行響應,Chrome仍拒絕接受響應。訪問控制 - 允許來源無法被Chrome識別
OPTIONS請求:
OPTIONS /api/shows/1 HTTP/1.1
Host: *****
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://localhost:8888
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36
Access-Control-Request-Headers: accept, platform, version
Accept: */*
Referer: http://local host:8888/
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
響應:
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Length: 0
Content-Type: */*
Content-Encoding: gzip
Expires: -1
Server: Microsoft-IIS/8.0
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Content-Type, Platform, Version
Access-Control-Allow-Methods: OPTIONS, TRACE, GET, HEAD, POST, PUT, DELETE
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Fri, 03 Oct 2014 19:07:28 GMT
在調試控制檯,瀏覽器就會顯示:
的XMLHttpRequest無法加載的http:// ****/API /節目/ 1。 對請求的資源沒有「訪問控制允許來源」標題。因此不允許訪問Origin'localhost:8888'。
顯然,是訪問控制允許來源中的迴應,但由於某種原因Chrome認爲它是無效的?有沒有我無法使用通配符進行響應的情況?
在此先感謝!
是您的瀏覽器也發送預檢請求後的*實際*請求?或者,您的最終目標是真正讀取OPTIONS響應(即,您的Ajax代碼執行xhr.open(「OPTIONS」,「/ api/shows/1」)),並且您認爲這*是實際請求? (即使這樣,這仍然是一個預檢,因爲OPTIONS是一個非簡單的HTTP方法,但這對你來說會更加困惑。) – apsillers 2014-10-03 19:31:03
是的,瀏覽器跟着一個GET請求,但它被放棄了。感謝你的想法。 – providencemac 2014-10-03 19:39:02
只要100%清楚,通過「廢棄」你的意思是GET請求永遠不會被髮送? (在Chrome網絡檢查器中它變成紅色?) – apsillers 2014-10-03 19:46:13