ヘッダー

レスポンスヘッダーは、デプロイのルートに置く _headers ファイルに書きます。書式は、Netlify と Cloudflare Pages が読むものの一部です。

既定のヘッダー

すべてのレスポンスに、次の3つのヘッダーが付きます。ただし、ホスト名全体を正規ドメインへ転送するリダイレクトには、Location しか付きません。

HTML (拡張子のないパス、.html、.htm) には Cache-Control: public, max-age=600 が、それ以外には public, max-age=86400 が付きます。サイトのファイルには ETag と Last-Modified も付くので、再訪したブラウザは確認だけで304を受け取れます。範囲リクエストにも対応しています。

_headers では、パスを選んで、既定の3つのヘッダーを上書きまたは削除でき、Cache-Control を上書きできます。変えられないものが2つあります。Kamakiri 標準の「ページが見つかりません」画面には、必ず既定のヘッダーが付きます。4xxと5xxのレスポンスは、ブロックが Cache-Control に何を設定していても no-store で配信されます。リダイレクトはこの対象外で、キャッシュできます。

Strict-Transport-Security は付かず、追加することもできません。

ファイル

_headers はブロックを並べたものです。1つのブロックは、字下げせず / で始まるパスの行と、そのあとに続く字下げしたヘッダーの行でできています。

# a full-line comment starts with #
/path/*
  X-Custom-Header: value
  Cache-Control: public, max-age=3600
  ! X-Frame-Options

ヘッダーとして読まれるのは、デプロイのルートにある、名前がちょうど _headers のファイルだけで、このファイルは配信されません。_Headers や sub/_headers は、ふつうのファイルとして配信されます。

ブロック

設定したヘッダーが既定のヘッダーを置き換えるのは、そのブロックのパスだけです。ほかのパスは既定のままです。

受け付けられない書き方

受け付けられない行が1つでもあると、デプロイ全体が行番号付きのエラーで失敗します。ディレクトリをデプロイするときは、kamakiri deploy がアップロードの前にファイルを検査します。アーカイブは、アップロードのあとにサービスが検査します。どちらの場合も、公開中のサイトは変わりません。

除外される名前

次の名前は、拒否ではなく除外されるので、Netlify や Cloudflare Pages から持ってきたファイルもそのままデプロイできます。ディレクトリをデプロイするときは、kamakiri deploy が除外した行ごとに警告を表示し、デプロイを続けます。アーカイブの場合は、警告なしに除外されます。

上限

どれかを超えたファイルは、切り詰められるのではなく、受け付けられません。

他サービスとの互換性

完全一致のパス、/*、/assets/* のように末尾に * を1つ付けたパスのもとに Name: value の行を並べたブロックは、Kamakiri、Netlify、Cloudflare Pages のどれでも同じように動きます。Netlify は ! Name を無視するので、ヘッダーを削除するファイルが同じように動くのは Cloudflare Pages だけです。:placeholder やそれ以外の * を使ったファイルは、どちらのサービスのものでも、ここでは受け付けられません。

例

# A custom header on every response
/*
  X-Custom-Header: hello

# Long-lived caching for hashed assets (one comma-separated line)
/assets/*
  Cache-Control: public, max-age=31536000, immutable

# Override a default site-wide
/*
  Referrer-Policy: no-referrer

# Drop a default for one path only; other paths keep X-Frame-Options: DENY
/embed/*
  ! X-Frame-Options