Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

ヘッダー

最終更新 Markdown で表示Agent セットアップ

カスタムヘッダー

静的アセットのレスポンスに付くデフォルトのレスポンスヘッダーは、上書き、削除、追加できます。拡張子なしのプレーンテキストファイル _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"

Cross-Origin Resource Sharing(CORS)

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/
検索結果に workers.dev URL を表示しない

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';

役に立ちましたか?