静的アセットのレスポンスに付くデフォルトのレスポンスヘッダーは、上書き、削除、追加できます。拡張子なしのプレーンテキストファイル _headers を、プロジェクトの静的アセットディレクトリに置きます。このファイル自体は静的アセットとして配信されません。Cloudflare Pages が解析し、ルールを静的アセットのレスポンスに適用します。
フレームワークを使っている場合、public/ や static/ というディレクトリがあることが多く、ここには favicon、robots.txt、サイトマニフェストなど、デプロイ可能なアセットが入ります。これらのファイルはビルド時に最終的な出力ディレクトリへコピーされるため、_headers ファイルを置くのに適しています。フレームワークを使っていない場合は、_headers ファイルを ビルド出力ディレクトリ に直接置けます。
_headers ファイルで定義したヘッダーは、Cloudflare が通常送るヘッダーより優先されます。
ヘッダールールは、複数行のブロックで定義します。ブロックの 1 行目は、ルールのヘッダーを適用する URL または URL パターンです。続く行に、インデントしたヘッダー名とヘッダー値の一覧を書きます。
[url]
[name]: [value]絶対 URL も使えます。ただし、絶対 URL は https で始まる必要があり、ポートの指定はできません。_headers ルールは、受信リクエストとの照合時に、リクエストのポートとプロトコルを無視します。たとえば、https://example.com/path のようなルールは、other://example.com:1234/path へのリクエストにも一致します。
続く行に、必要な数だけ [name]: [value] のペアを定義できます。例:
# This is a comment
/secure/page
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Referrer-Policy: no-referrer
/static/*
Access-Control-Allow-Origin: *
X-Robots-Tag: nosnippet
https://myproject.pages.dev/*
X-Robots-Tag: noindex複数のルールの URL パターンに一致する受信リクエストは、一致したすべてのルールのヘッダーを引き継ぎます。先ほどの _headers ファイルでは、次のリクエストに次のヘッダーが適用されます。
| リクエスト URL | ヘッダー |
|---|---|
https://custom.domain/secure/page |
X-Frame-Options: DENY X-Content-Type-Options: nosniff Referrer-Policy: no-referrer |
https://custom.domain/static/image.jpg |
Access-Control-Allow-Origin: * X-Robots-Tag: nosnippet |
https://myproject.pages.dev/home ↗ |
X-Robots-Tag: noindex |
https://myproject.pages.dev/secure/page ↗ |
X-Frame-Options: DENY X-Content-Type-Options: nosniff Referrer-Policy: no-referrer X-Robots-Tag: noindex |
https://myproject.pages.dev/static/styles.css ↗ |
Access-Control-Allow-Origin: * X-Robots-Tag: nosnippet, noindex |
ヘッダールールは最大 100 件です。_headers ファイルの各行は 2,000 文字までです。空白、ヘッダー名、値を含む行全体がこの上限に含まれます。
同じヘッダーが _headers ファイルで 2 回適用された場合、値はカンマ区切りで結合されます。
デフォルトヘッダーや、より広い範囲のルールで追加されたヘッダーを削除したい場合があります。ヘッダー名の前に感嘆符とスペース(! )を付けます。
/*
Content-Security-Policy: default-src 'self';
/*.jpg
! Content-Security-Policy_redirects と同じ URL マッチ機能を、_headers ファイルでも使えます。ただし、リダイレクトはヘッダーより先に適用されます。リクエストがリダイレクトとヘッダーの両方に一致する場合は、リダイレクトが優先されます。
マッチ時、アスタリスク(*)で表すスプラットパターンは、すべての文字に貪欲に一致します。URL に含められるスプラットは 1 つだけです。
一致した値は、ヘッダー値の中で :splat プレースホルダーとして参照できます。
プレースホルダーは :placeholder_name で定義できます。コロン(:)のあとに英字が続くとプレースホルダーの開始です。続くプレースホルダー名は英数字とアンダースコアで構成します(:[A-Za-z]\w*)。名前付きプレースホルダーは、それぞれ 1 回だけ参照できます。プレースホルダーは区切り文字以外のすべての文字に一致します。ホストの一部である場合、区切り文字はピリオド(.)またはスラッシュ(/)です。パスの一部である場合は、スラッシュ(/)のみです。
同様に、一致した値は :placeholder_name を使い、header の値でも利用できます。
/movies/:title
x-movie-name: You are watching ":title"Pages プロジェクトのすべての静的アセットを、ほかのドメインから取得できるようにするには、次を _headers ファイルに追加します。
/*
Access-Control-Allow-Origin: *これにより、任意の受信 URL に Access-Control-Allow-Origin ヘッダーが適用されます。より制限したい場合は、*.pages.dev サブドメインに適用する URL パターンを定義し、その staging ブランチのサブドメインからのアクセスだけを許可できます。
https://:project.pages.dev/*
Access-Control-Allow-Origin: https://staging.:project.pages.dev/Google ↗ などの検索エンジンは、サイトのインデックス方法をクローラーに指示する X-Robots-Tag ヘッダーをサポートしていることがよくあります。
たとえば、*.pages.dev と *.*.pages.dev の URL をインデックスされないようにするには、次を _headers ファイルに追加します。
https://:project.pages.dev/*
X-Robots-Tag: noindex
https://:version.:project.pages.dev/*
X-Robots-Tag: noindexフィンガープリント付きアセット(ファイル名にハッシュを含むアセット)のフォルダーがある場合、ブラウザーでより積極的なキャッシュを設定し、再訪時のパフォーマンスを上げられます。
/static/*
Cache-Control: public, max-age=31556952, immutableクリックジャッキングを防ぐには、ブラウザーに対して、アプリケーションをほかのページ内(たとえば <iframe>)に埋め込まないよう、X-Frame-Options ↗ ヘッダーで伝えます。
X-Content-Type-Options: nosniff ↗ は、ブラウザーがレスポンスを、Content-Type ヘッダーで定義したコンテンツタイプ以外として解釈することを防ぎます。
Referrer-Policy ↗ では、訪問者がページを離れるときに、どこから来たかの情報をどれだけ渡すかをカスタマイズできます。
ブラウザー機能は、Permissions-Policy ↗ ヘッダー(以前の名前は Feature-Policy)で段階的に無効化できます。
アプリケーションのコンテンツを細かく制御する必要がある場合は、Content-Security-Policy ↗ ヘッダーで、X-Frame-Options ヘッダーに近い制御を含む複数のセキュリティ設定を構成できます。
/app/*
X-Frame-Options: DENY
X-Content-Type-Options: nosniff
Referrer-Policy: no-referrer
Permissions-Policy: document-domain=()
Content-Security-Policy: script-src 'self'; frame-ancestors 'none';