レッスンに戻る

なぜ Origin が必要なのでしょう?

重要性: 5

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

例えば、http://javascript.info/some/url から http://google.com を取得しようとすると、そのヘッダは次のようになります。:

Accept: */*
Accept-Charset: utf-8
Accept-Encoding: gzip,deflate,sdch
Connection: keep-alive
Host: google.com
Origin: http://javascript.info
Referer: http://javascript.info/some/url

ご覧の通り、RefererOrigin 両方が存在します。

ここで質問です:

  1. Referer がより多くの情報を持っているのに、なぜ Origin が必要なのでしょうか。
  2. RefererOrigin がない、あるいはそれが正しくない可能性はありますか?

Origin は必要です。なぜなら、Referer はない場合があるからです。例えば、HTTPS で HTTP のページを fetch するとき(よりセキュアな場所からセキュアでない場所へアクセスするとき)、Referer はありません。

コンテンツセキュリティポリシー(Content Security Policy: CSP)Referer を送信するのを禁止する可能性があります。

後ほど分かりますが、fetch にも Referer の送信を防いだり、それを変更することを許可する(同じサイト内で)オプションがあります。

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

Referer は信頼できないため、Origin が発明されました。ブラウザはクロスオリジンリクエストのために、正しい Origin を保証します。