Origin
使い方
ブラウザは、クロスオリジンのリクエストや、特定のメソッドや API によって発生した同一オリジンのリクエストに Origin ヘッダーを付与します。このヘッダーはリクエストがどこで発生したかを識別し、サーバーがアクセス制御ポリシーを適用するために必要な情報を提供します。
このヘッダーは、すべての CORS リクエスト(プリフライトを含む)、POST を用いたフォーム送信、Fetch API や XMLHttpRequest から開始されたリクエストに現れます。同一オリジンの GET や HEAD によるナビゲーションリクエストには、ブラウザはこのヘッダーを含めません。
Referer ヘッダーとは異なり、Origin はパスやクエリ文字列を一切含まないため、値としてよりプライバシーに配慮したものになります。Sec-Fetch-Site ヘッダーは、リクエストを same-origin、same-site、cross-site、none に分類することで補完的なシグナルを提供します。
scheme://host:port
プロトコル、ホスト名、ポートからなる完全なオリジンです。プロトコルが既定のポート(HTTP は 80、HTTPS は 443)を使う場合、ポートは省略されます。
Origin: https://example.com
Origin: https://api.example.re:8443
null
オリジンがプライバシー上センシティブであるか不透明である場合に送信されます。サンドボックス化された iframe、data: URL、オリジンをまたぐリダイレクトは null 値を生み出します。
Origin: null
注意
アクセス制御を null に依存するサーバーはセキュリティ上の穴を作ります。互いに無関係な複数のコンテキストが同じ null オリジンを共有するため、この値を信頼するとそれらすべてにアクセスを許すことになります。
例
フロントエンドアプリケーションからのクロスオリジン POST には Origin ヘッダーが含まれ、サーバーは CORS 対応のレスポンスを返す前に呼び出し元を検証します。
リクエスト
POST /api/orders HTTP/1.1
Host: api.example.re
Origin: https://shop.example.re
Content-Type: application/json
レスポンス
HTTP/1.1 201 Created
Access-Control-Allow-Origin: https://shop.example.re
Vary: Origin
プリフライトの OPTIONS リクエストは、オリジンに加えて意図するメソッドとヘッダーを伝えます。
リクエスト
OPTIONS /api/orders HTTP/1.1
Host: api.example.re
Origin: https://shop.example.re
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type