Referrer-Policy
使い方
ブラウザがリンクをたどったりサブリソースを読み込んだりするとき、ブラウザは通常、発信元ページの URL を含む Referer ヘッダーを送ります。Referrer-Policy ヘッダーは、URL のどの部分を共有するか、あるいは Referer ヘッダーを送るかどうかをサイト運営者が制御できるようにします。
プライバシーに配慮するサイトは、クエリパラメーター、パス、オリジンの詳細がサードパーティへ漏れないようリファラー情報を取り除きます。このポリシーは、そのページから開始されるナビゲーション、サブリソースのリクエスト、プリフェッチの操作に適用されます。
カンマ区切りのポリシーのリストはフォールバックの連鎖として機能します。ブラウザはリストの中で自身がサポートする最後のポリシーを選ぶため、将来の互換性を見据えた導入が容易になります。
ポリシーの設定
リファラーポリシーを設定する仕組みは 3 つあります。
要素レベルの属性はページレベルの meta タグを上書きし、meta タグは HTTP ヘッダーを上書きします。HTTP ヘッダーは、HTML が解析される前にポリシーが有効になるため、最も確実な方法です。
no-referrer
no-referrer ディレクティブは Referer ヘッダーを完全に抑制します。そのページから発生するどのリクエストにも URL の情報は送られません。
no-referrer-when-downgrade
no-referrer-when-downgrade ディレクティブは、同じプロトコル同士のリクエストには完全な URL(オリジン、パス、クエリ文字列)を送ります。リクエストがセキュリティレベルを下げる場合(HTTPS から HTTP)、Referer ヘッダーは省略されます。
origin
origin ディレクティブは URL のオリジン部分(スキーム、ホスト、ポート)だけを送ります。パスとクエリ文字列はすべてのリクエストから取り除かれます。
origin-when-cross-origin
origin-when-cross-origin ディレクティブは、同一オリジンのリクエストには完全な URL を送ります。クロスオリジンのリクエストやプロトコルのダウングレードでは、オリジンのみが送られます。
same-origin
same-origin ディレクティブは、同一オリジンのリクエストには完全な URL を送り、クロスオリジンのリクエストでは Referer ヘッダーを完全に省略します。
strict-origin
strict-origin ディレクティブはオリジンのみを送り、しかもプロトコルのセキュリティレベルが同じか向上する場合(HTTPS から HTTPS、または HTTP から HTTP)に限ります。プロトコルのダウングレードではヘッダーが抑制されます。
strict-origin-when-cross-origin
strict-origin-when-cross-origin ディレクティブは、同一オリジンのリクエストには完全な URL を送り、同じセキュリティレベルのクロスオリジンのリクエストにはオリジンのみを送り、プロトコルのダウングレードではヘッダーを省略します。これは、Referrer-Policy が設定されていない場合の現代のブラウザにおける既定のポリシーです。
unsafe-url
unsafe-url ディレクティブは、宛先やプロトコルに関わらず、すべてのリクエストに完全な URL(オリジン、パス、クエリ文字列)を送ります。これは最も多くの情報を露出させるため、本番環境での利用が適切であることはほとんどありません。
例
クロスオリジンのナビゲーションではオリジンのみを送る、厳格な既定ポリシーです。
Referrer-Policy: strict-origin-when-cross-origin
リファラーのデータをすべて抑制する、プライバシー重視の設定です。
Referrer-Policy: no-referrer
ブラウザがサポートしていれば strict-origin を選び、そうでなければ no-referrer にフォールバックする連鎖です。
Referrer-Policy: no-referrer, strict-origin