レッスンに戻る

なぜ Origin が必要なのでしょうか。

重要性: 5

おそらくご存知のとおり、ネットワークリクエストを開始したページの URL が通常含まれている Referer という HTTP ヘッダーがあります。

たとえば、https://javascriptinfo.dokyumento.jp/some/url から http://google.com をフェッチすると、ヘッダーは次のようになります。

Accept: */*
Accept-Charset: utf-8
Accept-Encoding: gzip,deflate,sdch
Connection: keep-alive
Host: google.com
Origin: https://javascriptinfo.dokyumento.jp
Referer: https://javascriptinfo.dokyumento.jp/some/url

ご覧のとおり、RefererOrigin の両方が存在しています。

質問

  1. Referer にさらに多くの情報が含まれているのであれば、なぜ Origin が必要なのでしょうか。
  2. Referer または Origin がないことは可能ですか? それとも、それは誤りですか?

Referer がない場合があるため、Origin が必要です。たとえば、HTTPS から HTTP ページを fetch する場合 (より安全なものからより安全性の低いものへのアクセス)、Referer はありません。

コンテンツセキュリティポリシーによりRefererの送信が禁止される場合があります。

すでに確認したように、fetchには、Refererの送信を防止するオプションがあり、(同じサイト内であれば)変更することも許可されます。

仕様により、RefererはオプションのHTTPヘッダーです。

Refererに信頼性がないため、Originが考案されました。ブラウザは、クロスオリジンリクエストに対して正しいOriginを保証します。