2017-02-10 74 views
6

我已經按照這一步來設置我的服務器來啓用CORS。 https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api如何解決'預檢無效(重定向)'在CORS

但現在在我的瀏覽器,開發者控制檯,我看到此錯誤消息:

的XMLHttpRequest無法加載https://serveraddress/abc。 預檢無效(重定向)

您知道我能做些什麼來解決它嗎?我在HTTPS中發出CORS請求。我認爲這是導致'預檢失效(重定向)'失敗。但我不知道爲什麼或重定向OPTIONS請求。

謝謝。

回答

9

您的代碼導致您的瀏覽器發送重定向的CORS preflight OPTIONS request

瀏覽器當前拒絕在這種情況下遵循重定向,因爲CORS規範以前需要使用瀏覽器來執行此操作。限制實際上已不在規範中,但瀏覽器需要更新其實現以符合規範更改。

您可能可以調整您的代碼,以避免觸發瀏覽器發送OPTIONS請求。

至於什麼一切是怎麼回事針對這種情況,首先要注意的一點是,瀏覽器做了CORS預檢,如果:

  • 請求的方法是什麼,不是GET,HEAD或POST
  • 你設置比其他自定義請求頭AcceptAccept-LanguageContent-LanguageContent-TypeDPRDownlinkSave-DataViewport-Width,或Width
  • Content-Type請求頭具有比application/x-www-form-urlencodedmultipart/form-data以外的值,或text/plain

如果你不能改變你的代碼,以避免需要瀏覽器做了預檢,那麼另一個選擇是:

  1. 檢查響應並查看服務器在OPTIONS之後重定向到的URL。
  2. 更改您的代碼,直接向該其他網址發送請求。

有關可能的解決方法的詳細信息,請參閱CORS request with Preflight and redirect: disallowed. Workarounds?的答案。

另外如上所述,瀏覽器不遵循重定向CORS預檢的規則不再在規範中,但瀏覽器需要更新他們的實現以符合規範更改。

+0

感謝您的回答。我會按照你的意見。我的應用程序需要將Content-Type應用程序/ json發送到服務器,以便觸發預先運行。我無法改變這一點。 – n179911

+0

好的,但請注意[此修補程序已登陸Blink/Chromium源代碼](https://chromium.googlesource。com/chromium/src/+/eaeb7a5f8e9432594d8bcc09956c1f50e8f0ba66),但將在3月中旬推出的Chrome 57中發佈。但與此同時,如果您想對其進行測試,則可以下載[當前版本的Chrome Beta](https://chromereleases.googleblog.com/2017/02/beta-channel-update-for-desktop_8.html) ,這已經有了變化。 – sideshowbarker

相關問題