IEが非対応だったが、IEがなくなった今大体のブラウザは対応しているのでざっとまとめる
出典
書き方
<a href="http://example.com" referrerpolicy="設定したい値">
前提にいれておくべき知識
URLの内容を「originが同じかどうか」というような内容をベースに構成されるためoriginの概念を抑えておく必要がある
origin
URLにおけるoriginとは3つの要素で構成される
http
やhttps
などのコロンの前の文字列にあたるスキーム(利用プロトコル)example.com
などのホスト名- ポート番号
そのため http://super.example.com:80/user/20?user=false
というURLの場合のoriginは http://super.example.com:80
となる
また http://tekisou.example.com/?check_id=20
では http://tekisou.example.com/
となる
設定できる値と意味
値 | 意味 |
---|---|
no-referrer | Refererヘッダーが省略される。 |
origin | originの部分のみが送信される |
no-referrer-when-downgrade | パターンが2つに分かれる。「プロトコルのセキュリティ水準が同一である、または向上する場合 (HTTP→HTTP, HTTP→HTTPS, HTTPS→HTTPS、等) のとき」のみ「origin+パス+クエリーストリング」を送信。そうではない(セキュリティ水準が低下する)場合はRefererヘッダーが省略される。 |
origin-when-cross-origin | パターンが2つに分かれる。「プロトコルのセキュリティ水準が同じ」かつ「同一originのリクエスト」の場合は「origin+パス+クエリーストリング」、そうでない場合はoriginのみを送る |
same-origin | パターンが2つに分かれる。「同一originのリクエスト」の場合は「origin+パス+クエリーストリング」を、そうでない場合はRefererヘッダーが省略される。 |
strict-origin | パターンが2つに分かれる。「プロトコルのセキュリティ水準が同じ」場合にoriginを送信し、そうでない場合はRefererヘッダーが省略される。 |
strict-origin-when-cross-origin | パターンが3つに分かれる。「同一originのリクエスト」の場合は「origin+パス+クエリーストリング」を、「異なるoriginの場合かつプロトコルのセキュリティ基準が同じ」の場合は「origin」を、そうでない場合はRefererヘッダーが省略される。 |
unsafe-url | セキュリティなどにも関係なく「origin+パス+クエリーストリング」を送信する。 |
上記の通り基準としては以下
- 2つURL間でセキュリティ基準に変化があるかどうか。
- originが同一(same-origin)か異なる(cross-origin)かどうか
セキュリティ基準の変化に関しては厳密な定義がかなり読み解きにくい。そのため厳密な定義の言及は今回は割愛するが、詳しくはW3Cの例と文中に登場する potentially trustworthy URL
の解説記事参照のこと
主要ブラウザのデフォルトはどれなのか
2023年春ごろ時点では strict-origin-when-cross-origin
がデフォルトとされている。が、明言されていない部分もあるので雑にまとめると状態は以下。
ブラウザ | 公式のデフォルト値 | 参照元など参考情報 |
---|---|---|
chrome | strict-origin-when-cross-origin | A new default Referrer-Policy for Chrome - strict-origin-when-cross-origin - Chrome Developers |
firefox | strict-origin-when-cross-origin | Firefox 87 trims HTTP Referrers by default to protect user privacy - Mozilla Security Blog |
safari | 不明(明確に明言されていない) | W3CのPRで共通でstrict-origin-when-cross-origi になった記載はあるが、公式アナウンスはない。またITPの影響で3rdPartyの場合は一律originのみになることが公式 で出ている |
どのHTML要素で使えるのか
aタグ以外にも img
, iframe
, script
, link
. area
にも使える。