1. ホーム
  2. cors

[解決済み】「プリフライトが無効です(リダイレクト)」または「プリフライト要求に対してリダイレクトは許可されていません」を解決する方法

2022-01-30 08:45:09

質問内容

私はこのステップに従って、CORSを有効にするために私のサーバーを設定しました。 https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api

しかし今、ブラウザのdev consoleで、このエラーメッセージが表示されています。

XMLHttpRequest を読み込むことができません。 https://serveraddress/abc . のレスポンスは preflightは無効です(リダイレクト)

どうすればいいかわかりますか? HTTPSでCORSリクエストをしています。それが「preflight is invalid (redirect)」という失敗の原因になっていると思うのですが。 しかし、なぜ、何がOPTIONSリクエストをリダイレクトしているのかわかりません。

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

解決方法は?

簡単な答え コード内のリクエストURLの末尾にスラッシュがないことを確認してください。

質問で挙げられているエラーの最も一般的な原因は、「末尾のスラッシュがない」という問題です。

しかし、それは のみ 最も一般的な原因です。詳しくはこちらをご覧ください。

このエラーが表示された場合、あなたのコードがブラウザに CORSプリフライト OPTIONS リクエスト で応答し、サーバは 3xx リダイレクトされます。このエラーを回避するためには、リクエストに 2xx 成功レスポンスに置き換えます。

を送信するようブラウザをトリガーしないように、コードを調整することができるかもしれません。 OPTIONS のリクエストに対応します。

この場合、何が起こっているかというと、ブラウザがCORSプリフライティングを行うことを知っておくことが重要です。

  • リクエストメソッドが GET , HEAD または POST
  • 以外のカスタムリクエストヘッダを設定した場合。 Accept , Accept-Language , Content-Language , Content-Type , DPR , Downlink , Save-Data , Viewport-Width または Width
  • その Content-Type リクエストヘッダの値が application/x-www-form-urlencoded , multipart/form-data または text/plain

もし、ブラウザがプリフライトを行う必要がないようにコードを変更することができない場合は、別の選択肢もあります。

  1. のURLを調べます。 Location のレスポンスヘッダが OPTIONS リクエストに対応します。
  2. 代わりにその別のURLに直接リクエストを行うようにコードを変更します。

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

ブラウザのdevtoolsのネットワークペインで OPTIONS リクエストの値からリダイレクト URL を探し出し Location レスポンスヘッダがあります。