2017-02-10 3 views
6

CORSを有効にするためにこの手順を実行しました。 https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-apiCORSのプリフライトが無効(リダイレクト)を解決する方法

は、しかし、今、私のブラウザのdevのコンソールで、私はこのエラーメッセージが表示されます。

の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
  • あなたはブラウザがプリフライトを行うための必要性を回避するためにコードを変更できない場合リクエストヘッダは、application/x-www-form-urlencoded以外の値を持つmultipart/form-data、またはtext/plain

、その後、別のオプションは次のとおりです。

  1. を調べレスポンスを返し、OPTIONSの後にサーバーがリダイレクトしているURLを確認します。
  2. コードを変更して、代わりにその別のURLにリクエストを行います。

解決策の詳細については、CORS request with Preflight and redirect: disallowed. Workarounds?を参照してください。

また、CORSプリフライトのリダイレクトに従わないブラウザの制限事項は仕様に含まれていませんが、ブラウザは仕様変更に合わせて実装を更新する必要があります。

+0

あなたの答えをありがとう。私はあなたの助言に従います。私のアプリは、Content-Typeアプリケーション/ jsonをサーバーに送信して、それがプリフライトをトリガーするようにする必要があります。それを変えることはできません。 – n179911

+0

OKですが、[これに対する修正は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

関連する問題