web-dev-qa-db-ja.com

「プリフライトが無効(リダイレクト)」または「プリフライトリクエストにリダイレクトが許可されていない」を解決する方法

この手順に従って、サーバーをセットアップしてCORSを有効にしました。 https://docs.Microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-Origin-requests-in-web-api

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

XMLHttpRequestをロードできません https:// serveraddress/abc 。プリフライトの応答が無効です(リダイレクト)

私はそれを修正するために何ができるか知っていますか? HTTPSでCORSリクエストを作成しています。それが「プリフライトが無効(リダイレクト)」の障害の原因だと思います。しかし、OPTIONSリクエストをリダイレクトする理由や理由はわかりません。

ありがとうございました。

15
n179911

コードにより、ブラウザが CORSプリフライトOPTIONSリクエスト を送信し、サーバーが_3xx_リダイレクトで応答します。代わりに_2xx_成功メッセージで応答する必要があります。

ブラウザをトリガーしてOPTIONSリクエストを送信しないようにコードを調整できる場合があります。

この場合に何が起こっているかについては、ブラウザが次の場合にCORSプリフライトを実行することを知っておくことが重要です。

  • リクエストメソッドは、GETHEAD、またはPOST以外のものです
  • Accept、_Accept-Language_、_Content-Language_、_Content-Type_、DPRDownlink、_Save-Data_、_Viewport-Width_、またはWidth
  • _Content-Type_要求ヘッダーの値が_application/x-www-form-urlencoded_、_multipart/form-data_、または_text/plain_以外の場合

ブラウザがプリフライトを実行する必要を避けるためにコードを変更できない場合、別のオプションは次のとおりです。

  1. Location要求に対する応答のOPTIONS応答ヘッダーのURLを調べます。
  2. コードを変更して、代わりに他のURLに直接リクエストを送信します。

URLの違いは、パスの末尾のスラッシュのような単純なものかもしれません。たとえば、コード内のURLを_http://localhost/api/auth/login/_ではなく_http://localhost/api/auth/login_(末尾のスラッシュに注意)に変更する必要がある場合があります。 (末尾のスラッシュなし)。

ブラウザdevtoolsの[ネットワーク]ペインを使用して、OPTIONSリクエストへの応答を調べ、Location応答ヘッダーの値でリダイレクトURLを見つけることができます。

18
sideshowbarker