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