ユーザーが(トークンを使用して)認証できるようにし、同じドメイン内にリダイレクトを含む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
の実際のリソースを/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
)にある場合でも、1つcannotが認証済みリソースのリダイレクトを行わないことを意味するようです。
これは本当ですか?一般的な回避策はありますか?