なぜ 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
ご覧の通り、Referer と Origin 両方が存在します。
ここで質問です:
Refererがより多くの情報を持っているのに、なぜOriginが必要なのでしょうか。RefererやOriginがない、あるいはそれが正しくない可能性はありますか?
Origin は必要です。なぜなら、Referer はない場合があるからです。例えば、HTTPS で HTTP のページを fetch するとき(よりセキュアな場所からセキュアでない場所へアクセスするとき)、Referer はありません。
コンテンツセキュリティポリシー(Content Security Policy: CSP) は Referer を送信するのを禁止する可能性があります。
後ほど分かりますが、fetch にも Referer の送信を防いだり、それを変更することを許可する(同じサイト内で)オプションがあります。
仕様によると、Referer はオプションの HTTP ヘッダです。
Referer は信頼できないため、Origin が発明されました。ブラウザはクロスオリジンリクエストのために、正しい Origin を保証します。