ishikawa_pro's memorandum

若手webエンジニアの備忘録です.

Swift Node.js Docker AWS etc...色々やります。

chromeのreferrer-policyについて

[9/8追記]
chrome 85がリリースされたのに、defaultのreferrer-policy変わってないなと思ったら段階的に変わっていくみたいです。
A new default Referrer-Policy for Chrome: strict-origin-when-cross-origin


こんにちは。
業務でchromeのreferrer-policyについてちょっと調べることがあったので、今日は軽くまとめです。

referrer-policyとは

そもそも僕が、referrer-policyについてそんなに詳しくなかったのでまずは簡単な説明。
Referrer-policyは、リクエスト時にreferer headerにどれくらいreferer情報をつけるかを設定するためのヘッダーです。
refererの情報量とは、具体的に

  • origin, path, query 全て
  • originだけ
  • 情報なし

の3パターンがあります。

referrer-policy headerに付けられる値は、

  • no-referrer
  • no-referrer-when-downgrade
  • origin
  • origin-when-cross-origin
  • same-origin
  • strict-origin
  • strict-origin-when-cross-origin
  • unsafe-url

があります。
それぞれの値がどういう振る舞いをするかなどの詳細はMDNがよくまとまっています。

developer.mozilla.org

referer の正しいスペルは referrer ですが、RFCの標準化時にスペルミスしたものがそのまま登録されたという話は、 Real World HTTP で読んだ気がします。
referrer-policyの方は、後からできたので正しいスペルになってるそうです。

chromeのdefault値について

現在のchromeは、 デフォルトのreferrer-policyが no-referrer-when-downgrade になっています。
no-referrer-when-downgrade は、https => https や http => https などのセキュリティ水準が同一または改善される場合は、クエリなどの全ての情報が送信されますが、https => http のように水準が低下する場合は、refererを送信しない挙動になっています。
そしてここからが本題です。
chromeのdefaultのreferrer-policy が version 85から strict-origin-when-cross-origin へ変わるそうです。
www.chromestatus.com

strict-origin-when-cross-origin は、同一オリジンの場合はクエリを含む全ての情報を送信し、クロスオリジンの場合はoriginのみを送信、 https => httpへのセキュリティレベルの落ちる通信では情報を送信しません。
僕は、会社のPCのデフォルトブラウザをMicrosoft Edgeカナリアリリース版を使ってるのですが、EdgeはCanary v79と Dev v79から反映されていました。
stable版に、いつ反映されるかは確認できませんでした。(version 83.0.478.64現在は no-referrer-when-downgrade でした) docs.microsoft.com

今回、業務で開発してるアプリケーションでreferer headerを使っている部分があり、カナリアリリース版のEdgeでアクセスした場合に、挙動がおかしかったので気付きました。
ちなみに、僕の試した環境だとサブドメインが同じ場合でもクロスオリジンとみなされていました。 (originしか入っていなかった)

おわりに

今回は、referrer-policyについてと、chromeのreferrer-policyのdefaultが変更されることについてまとめました。
普段、カナリアリリース版のEdgeを使っていますが、今回初めて業務の役にたったきがします笑
ベータ版とかを積極的に使っていくこともやっぱり大事ですね笑

御拝読ありがとうございました。