從我讀過有關CORS,我的理解它應該工作如下:CORS:爲什麼我的瀏覽器不發送OPTIONS預檢請求?
- 腳本在客戶端試圖從服務器不同產地獲取資源。
- 瀏覽器攔截此請求,並首先將預檢選項請求設置爲相同的URL。
- 如果響應該預檢請求包含適當的報頭(例如
Access-Control-Allow-Origin: *
),瀏覽器理解它允許發送主請求和做它。 - 響應返回給客戶端腳本。
我已經建立了一個測試這樣的:
- 服務器轉到同時接受 - GET和OPTIONS請求(使用curl檢查) - 和響應 設置
簡單的HTML頁面下面的腳本在它(jQuery的
$
站)(由另一個端口上的另一個服務器提供):$.ajax({ type: "GET", crossDomain: true, url: "http://local.site.com/endpoint, success: function (data) { alert(data); }, error: function (request, error) { alert(error); } });
Access-Control-*
頭
當我把這種方法,但是,我只看到一個GET沒有預檢選項在網絡選項卡要求在兩個 - 鉻49和Firefox 33
下面是Chrome瀏覽器使用GET請求的細節:
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8,ru;q=0.6
Connection:keep-alive
Host:local.adform.com
Origin:http://localhost:7500
Referer:http://localhost:7500/test-page.html
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36
和相應的響應:
Access-Control-Allow-Headers:Accept, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization
Access-Control-Allow-Methods:POST, GET, OPTIONS, PUT, DELETE
Access-Control-Allow-Origin:*
Content-Length:2
Content-Type:text/plain; charset=utf-8
Date:Wed, 03 Aug 2016 10:53:19 GMT
上任何思考爲什麼我的瀏覽器(S)不送預檢要求?
預檢並不總是完成,使用GET的可能性較小(如果有的話) - 請參閱[文檔](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests)當需要預檢時 –
請參閱[本](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests)以獲取有關瀏覽器何時發出預檢請求的更多信息。 – robertklep
@JaromandaX:謝謝你的評論。如果不需要預檢請求,那麼克服「同源」策略的(傳統)方法是什麼?情景是:我們創建了一個腳本,將合併到第三方網站,並將發送給我們_our_ cookies?據我所知,沒有預檢請求,瀏覽器不會向我們的服務器發送cookies,對吧? – ffriend