キャッシュ
Cache API ↗は、Cloudflareグローバルネットワーク ↗キャッシュからの読み取りおよび書き込みを細かく制御することを可能にします。
Cache APIはグローバルに利用可能ですが、キャッシュの内容は発信元データセンターの外では複製されません。GET /usersのレスポンスは発信元データセンターにキャッシュされますが、明示的に作成されない限り、他のデータセンターには存在しません。
カスタムドメインにデプロイされたWorkersは、機能的なcache操作にアクセスできます。Pages functionsも、カスタムドメインまたは*.pages.devドメインに接続されている場合、同様です。
ただし、Cloudflare Workersダッシュボードエディター、Playgroundプレビュー、および*.workers.devデプロイメントでのCache API操作は影響を与えません。Cloudflare Access ↗によってフロントエンドされているWorkersでは、Cache APIは現在利用できません。
caches.default APIは、ウェブブラウザのCache APIに強く影響されていますが、いくつかの重要な違いがあります。たとえば、Cloudflare Workersランタイムは単一のグローバルキャッシュオブジェクトを公開します。
let cache = caches.default;await cache.match(request);caches.open ↗メソッドを使用して、追加のCacheインスタンスを作成および管理できます。
let myCache = await caches.open('custom:cache');await myCache.match(request);Cache APIの実装は、put()に渡されたレスポンスの以下のHTTPヘッダーを尊重します:
Cache-Control- キャッシュディレクティブを制御します。これはCloudflare Cache-Control Directivesと一致します。
Cache-Controlディレクティブが存在しない場合のHTTPレスポンスコードとそのTTLのリストについてはEdge TTLを参照してください。
- キャッシュディレクティブを制御します。これはCloudflare Cache-Control Directivesと一致します。
Cache-Tag- 後でタグによるリソースのパージを可能にします(エンタープライズのみ)。
ETagcache.match()がIf-None-Matchを使用して条件付きリクエストを評価できるようにします。
Expires文字列- リソースが無効になる時期を指定する文字列です。
Last-Modifiedcache.match()がIf-Modified-Sinceを使用して条件付きリクエストを評価できるようにします。
これは、ウェブブラウザのCache APIとは異なり、リクエストまたはレスポンスのヘッダーを尊重しません。
cache.put(request, response);-
put(request, response): Promise- 指定されたリクエストをキーとして使用して、レスポンスをキャッシュに追加しようとします。キャッシュがレスポンスを正常に保存したかどうかに関わらず、
undefinedに解決されるPromiseを返します。
- 指定されたリクエストをキーとして使用して、レスポンスをキャッシュに追加しようとします。キャッシュがレスポンスを正常に保存したかどうかに関わらず、
-
requeststring | Request- キーとして使用される文字列または
Requestオブジェクトです。文字列が渡されると、新しいRequestオブジェクトのURLとして解釈されます。
- キーとして使用される文字列または
-
responseResponse- 指定されたキーの下に保存される
Responseオブジェクトです。
- 指定されたキーの下に保存される
cache.putは以下の場合にエラーをスローします:
- 渡された
requestがGET以外のメソッドです。 - 渡された
responseのstatusが206 Partial Content↗です。 - 渡された
responseがVary: *ヘッダーを含んでいます。Varyヘッダーの値はアスタリスク(*)です。詳細についてはCache API仕様 ↗を参照してください。
cache.putは、Cache-Controlがキャッシュしないよう指示するか、レスポンスが大きすぎる場合に413エラーを返します。
cache.match(request, options);-
match(request, options): Promise<Response | undefined>- そのリクエストにキー付けされたレスポンスオブジェクトをラップするPromiseを返します。
-
requeststring | Request- ルックアップキーとして使用される文字列または
Requestオブジェクトです。文字列は新しいRequestオブジェクトのURLとして解釈されます。
- ルックアップキーとして使用される文字列または
-
options- 一つの可能なプロパティを含むことができます:
ignoreMethod(Boolean)。trueの場合、リクエストは実際の値に関わらずGETリクエストと見なされます。
- 一つの可能なプロパティを含むことができます:
ブラウザのCache APIとは異なり、Cloudflare Workersはmatch()でignoreSearchまたはignoreVaryオプションをサポートしていません。この動作は、put()時にクエリ文字列やHTTPヘッダーを削除することで実現できます。
Cache APIの実装は、match()に渡されたリクエストの以下のHTTPヘッダーを尊重します:
-
Range- Content-Lengthヘッダーを持つ一致するレスポンスが見つかった場合、
206レスポンスになります。あなたのCloudflareキャッシュは、レスポンスにAccept-Rangesヘッダーがあっても、常に範囲リクエストを尊重します。
- Content-Lengthヘッダーを持つ一致するレスポンスが見つかった場合、
-
If-Modified-Since- 一致するレスポンスが
Last-Modifiedヘッダーを持ち、その値がIf-Modified-Sinceで指定された時間以降である場合、304レスポンスになります。
- 一致するレスポンスが
-
If-None-Match- 一致するレスポンスが
ETagヘッダーを持ち、その値がIf-None-Matchの値と一致する場合、304レスポンスになります。
- 一致するレスポンスが
-
cache.match()- オリジンにサブリクエストを送信することはありません。一致するレスポンスがキャッシュに見つからない場合、
cache.match()が返すPromiseはundefinedで満たされます。
- オリジンにサブリクエストを送信することはありません。一致するレスポンスがキャッシュに見つからない場合、
cache.matchは、要求されたコンテンツが見つからないか期限切れの場合に504エラー応答を生成します。Cache APIはこの504をWorkerスクリプトに直接公開せず、代わりにundefinedを返します。それでも、基礎となる504はCloudflare Logsで見ることができます。
Cloudflare Logsを使用している場合、RequestSourceがedgeWorkerCacheAPIのこれらの504レスポンスを見ることができます。これらはキャッシュされたアセットが見つからなかったり期限切れだった場合に予想されるものです。edgeWorkerCacheAPIリクエストは、Cache Analyticsなどの他のビューではすでにフィルタリングされています。これらのリクエストをフィルタリングするか、あなたのウェブサイトのエンドユーザーによるリクエストのみをフィルタリングするには、エンドユーザーのフィルタリングを参照してください。
cache.delete(request, options);delete(request, options): Promise<boolean>
キャッシュからResponseオブジェクトを削除し、BooleanレスポンスのPromiseを返します:
true: レスポンスはキャッシュされていましたが、現在は削除されました。false: レスポンスは削除時にキャッシュに存在しませんでした。
-
requeststring | Request- ルックアップキーとして使用される文字列または
Requestオブジェクトです。文字列は新しいRequestオブジェクトのURLとして解釈されます。
- ルックアップキーとして使用される文字列または
-
optionsobject- 一つの可能なプロパティを含むことができます:
ignoreMethod(Boolean)。リクエストメソッドを実際の値に関わらずGETと見なします。
- 一つの可能なプロパティを含むことができます: