Skip to content

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

制限事項

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

Workers Caching が適用されないシナリオを先に示し、続けて、すでに使っているほかのキャッシュとの関係を説明します。

未対応のシナリオ

HTTP メソッド

キャッシュされるのは GETHEAD リクエストだけです。POSTPUTPATCHDELETE、そのほかのメソッドは、常に Worker を呼び出します。

同じ URL に対する GETHEAD は、1 つのキャッシュエントリを共有します。キャッシュが空のときに届いた HEAD リクエストは、内部で GET に変換され、完全なアセットでキャッシュが埋まります。キャッシュキー を参照してください。

べき等でないリクエストのレスポンスをキャッシュしたい場合は、Worker 内で明示的に行います。たとえば、リクエスト本文をハッシュして合成 URL を作り、内部の GET サブリクエストを送ります。

WebSocket アップグレード

WebSocket のアップグレードリクエスト(Upgrade: websocket 付きの GET)はキャッシュを迂回し、常に Worker を呼び出します。WebSocket セッションは定義上ステートフルであり、キャッシュの単位としては向きません。

カスタム RPC メソッド

Workers Caching を通るのは、WorkerEntrypoint に対する fetch() 呼び出しだけです。ctx.exports.Backend.getUser(id) のようなカスタム RPC メソッドはキャッシュを迂回し、エントリポイントの cache.enabled 設定に関係なく、常に呼び出し先を実行します。

いま RPC メソッドとして公開している処理をキャッシュしたい場合は、専用のエントリポイント上の fetch ハンドラーに切り出し、fetch() で呼び出します。

キャッシュされないステータスコード

次のレスポンスは、明示的な Cache-Control ディレクティブがあっても、Workers Caching は保存しません。

  • 520526(Cloudflare のフェイルセーフレスポンス)は一時的なエラーとして扱い、常に Worker を再実行します。
  • Worker が返す 206 Partial Content は保存されません。Workers Caching は、Worker が完全な 200 レスポンスを返し、Range の切り出しは自分で行うことを想定しています。対応しているパターンは Range リクエスト を参照してください。

そのほかの呼び出し種別

Workers Caching が適用されるのは、Worker エントリポイントfetch ハンドラーが扱う HTTP リクエストだけです。次の呼び出し種別は、キャッシュを介さず常に実行されます。

ホスト単位のパージ

「ホスト単位のパージ」モードはありません。キャッシュは ドメインではなく Worker に属します。ホストはキャッシュキーの一部ではないため、ホスト単位のパージはキャッシュが保存しているものに対応しません。代わりに タグ単位のパージパスプレフィックス単位のパージ、または purgeEverything を使います。

キャッシュのプリウォーム

ビルド時に生成したレスポンスでキャッシュを事前投入する API はありません。レスポンスは、少なくとも 1 回配信されたあとでキャッシュされます。事前レンダリングしたコンテンツを最初のリクエストにも出したい場合は、Static Assets を使います。

制限

レスポンスサイズ

レスポンスサイズの制限は、Cloudflare のゾーンキャッシュと同じです。プランごとの制限は キャッシュ可能なサイズ制限 を参照してください。

Cache-Tag の制限

Cache-Tag 値の個数、長さ、文字種の制限は、Cloudflare のゾーンキャッシュと同じです。一覧は キャッシュタグの制限 を参照してください。

パージのレート制限

ctx.cache.purge() は、ゾーンのパージ API と同じレート制限システムを使います。ただし Workers Caching はゾーンではなく Worker に紐づくため、アカウントやゾーンのプランに関係なく、常に 可用性と制限 に記載の Free ティアの制限 を使います。

ほかのキャッシュとの関係

ゾーンレベルのキャッシュ設定

Workers Caching は ゾーンのキャッシュではなく、Worker 自身のキャッシュ です。設定面は Worker そのものなので、横に並べて設定する別レイヤーのルールや設定はありません。次の機能は、いずれも Workers Caching には適用されません。

ゾーンレベルの機能 Workers Caching での相当機能
Cache RulesCache Response Rules Worker 内で Cache-Control ヘッダーを設定するか、リクエストに応じて分岐し、パスごとに異なるヘッダーを返します。
Cache Rules でのキャッシュキーのカスタマイズ Workers Caching には独自のキー構成があります。キャッシュキー を参照してください。リクエストを整形してキーを作ります(たとえば URL を書き換える、ゲートウェイ Worker で ctx.props を設定する)。
ゾーンレベルのキャッシュレベル設定(bypass / standard / aggressive / ignore query string) レスポンスの Cache-Control ヘッダーで、同じ意図をリクエスト単位で表します。
ゾーンのデフォルトのキャッシュ対象拡張子リスト Workers Caching は、ヘッダーがキャッシュ可能と示すレスポンスなら、拡張子に関係なくキャッシュします。
カスタムの階層型キャッシュトポロジー Workers Caching は、デフォルトで汎用の階層型キャッシュトポロジーを使います。Worker はどこでも実行できるため、固定のカスタムトポロジーは当てはまりません。将来 Smart Placement と連携すれば、階層化をさらに調整できる可能性があります。
キャッシュ前にリクエストまたはレスポンスを変更する Rulesets 返す前に、Worker のコードでリクエストまたはレスポンスを変換します。

Worker のキャッシュに影響を与えるには、Worker を変更します。Cache-Control ヘッダー、ctx.props、サービスバインディングの組み合わせ、ctx.cache.purge() が設定面です。

Cache API(caches.default

Cache API は、別のプログラム向けキャッシュストアです。Workers Caching とは独立しており、一方の操作は他方に影響しません。Workers Caching のエントリを無効化するのは ctx.cache.purge() です。

新しい Worker では、Workers Caching を優先してください。Cache API は設計上、より低レベルのプリミティブです。

  • リードスルーしません。レスポンスがキャッシュされるのは Worker が明示的に put() を呼んだときだけで、リクエストは入ってくるたびに Worker を実行します。
  • 同じリソースへの 同時リクエストの集約 はありません。未キャッシュの URL へのトラフィックのバーストは、リクエストごとに Worker を呼び出します。
  • 階層型キャッシュ には参加しません。

Workers Caching は、この 3 つを自動で提供します。細かいプログラム制御が必要なときは、Cache API が役に立ちます。

fetch() サブリクエストのキャッシュ

Workers Caching は、Worker の 手前にある サーバーサイドキャッシュです。Worker が自身のオリジンへ送る fetch() サブリクエストの手前にあるキャッシュとは別物です。両者は独立して動きます。fetch() サブリクエストのヒットはオリジンへの往復を省き、Workers Caching のヒットは Worker 自体の実行を省きます。

Requestcf プロパティは、両者で振る舞いが異なります。

cf プロパティ オリジンへの outgoing fetch() ctx.exports.<Entrypoint>.fetch()
cf.cacheKey 対応 対応 — カスタムキャッシュキー を参照してください
cf.cacheControl 対応 対応 — 呼び出し元 Worker から Cache-Control を上書きする を参照してください
cf.cacheTtl 対応 非対応 — TTL は、呼び出し先から Cache-Control: max-age=N(または s-maxage=N)を返すか、呼び出し元から cf.cacheControl で上書きして設定します
cf.cacheEverything 対応 非対応 — Workers Caching はレスポンスの Cache-Control からキャッシュ可否を判断します。本来キャッシュできないレスポンスを強制キャッシュする上書きはありません

近日公開

次の機能を開発中です。

  • Wrangler なしでキャッシュを有効にするための ダッシュボード UI
  • Workers Observability の Cache Analytics

役に立ちましたか?