2014-10-03 27 views
1

我瞭解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認爲它是無效的?有沒有我無法使用通配符進行響應的情況?

在此先感謝!

+2

是您的瀏覽器也發送預檢請求後的*實際*請求?或者,您的最終目標是真正讀取OPTIONS響應(即,您的Ajax代碼執行xhr.open(「OPTIONS」,「/ api/shows/1」)),並且您認爲這*是實際請求? (即使這樣,這仍然是一個預檢,因爲OPTIONS是一個非簡單的HTTP方法,但這對你來說會更加困惑。) – apsillers 2014-10-03 19:31:03

+0

是的,瀏覽器跟着一個GET請求,但它被放棄了。感謝你的想法。 – providencemac 2014-10-03 19:39:02

+1

只要100%清楚,通過「廢棄」你的意思是GET請求永遠不會被髮送? (在Chrome網絡檢查器中它變成紅色?) – apsillers 2014-10-03 19:46:13

回答

1

訪問控制請求報頭是區分大小寫的... 接受應該接受

+0

你能提供這方面的引文嗎?我在W3c規範中看不到任何標題區分大小寫:http://www.w3.org/TR/cors/此外,Chrome會自動將標題名稱更改爲小寫字母,因此我會很驚訝如果是這樣的話 – providencemac 2014-10-04 13:30:47

+3

從http://www.html5rocks.com/en/tutorials/cors/ HTTP頭匹配(不區分大小寫): 接受 接受語言 內容語言 最後,事件ID Content-Type,但前提是該值爲: application/x-www-form-urlencoded multipart/form-data text/plain – Beckafly 2014-10-04 18:26:59

1

在這種情況下,我解決這個問題也通過包括在GET響應Access-Control-*頭爲好。根據我對規範的理解,這不應該被要求,但問題是通過這種方式解決的。

如果有人能夠解釋這一點,我很樂意聽到它

0

轉到「桌面」選擇「谷歌瀏覽器」圖標和「右鍵單擊」就可以了,然後去它的「屬性」

這裏屬性在這個框中找到標籤爲「Target」的輸入框,chrome的位置如下給出。

「C:\ Program Files文件(x86)的\谷歌\鍍鉻\應用\的chrome.exe」 - 禁用網絡安全的user-data-DIR = 「C:/ someFolderName」

最後,推出的Chrome剛看到在屏幕上方彈出帶有黃色

來源:https://www.thegeekstuff.com/2016/09/disable-same-origin-policy/?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%253A+TheGeekStuff+(The+Geek+Stuff)

好運

相關問題