ユーザーが(トークンを使用して)認証できるようにし、同じドメイン内にリダイレクトを含む API を設計しています。ここで、303 を返すエンドポイントへの認証されていないリクエストの場合、
GET /documents/123 --> 303 redirect to `/documents/abc`
GET /documents/abc --> 200
すべてがうまくいきます。
Authorization
ヘッダーが送信されるのと同じエンドポイントに対して認証済みのリクエストを行いましょう。これにより、リクエストがプリフライト リクエストになり、ブラウザはプリフライトOPTIONS
リクエストを実行します。
OPTIONS /documents/123 --> 204 (everything okay, please proceed)
GET /documents/123 --> 303 redirect to `/documents/abc`
この時点で、ブラウザはGET
で実際のリソースを ting する代わりに、/documents/abc
XMLHttpRequest cannot load http://localhost:8000/people/username/nschloe.
The request was redirected to 'http://localhost:8000/people/YDHa-B2FhMie',
which is disallowed for cross-origin requests that require preflight.
この動作は標準に従っています:
7.1.5 プリフライトを使用したクロスオリジン リクエスト
応答の HTTP ステータス コードが 2xx の範囲にない場合
ネットワーク エラーの手順を適用します。
これは、リダイレクトが同じドメイン上にある場合でも、認証されたリソースのリダイレクトを実行できないことを意味しているようです( localhost
)。
これは本当に真実でしょうか?一般的な回避策はありますか?