cachesオブジェクトを注入します。このオブジェクトは一連のキャッシュ操作インターフェースを提供します。default名前空間を使用するかどうか、およびRequestがeo.cacheKey を含むかどうかによって区別されます。キャッシュ空間 | 判定条件 | 書き込み側 | 関数内で利用可能な操作 |
EdgeOneサイトキャッシュ | default名前空間を使用し、かつRequestがeo.cacheKeyを保持していない場合 | EdgeOneはサイトキャッシュルールに従って書き込みます。 | cache.match のみ |
エッジ関数独立キャッシュ | default以外の名前空間を使用するか、またはRequestがeo.cacheKeyを保持している場合 | 関数内で cache.putにより書き込みます。 | cache.match / cache.put / cache.delete |
default名前空間を使用し、かつeo.cacheKeyを含まない場合、拒否され、forbidden cdn cacheエラーがスローされます。eo.cacheKeyを含みません。default名前空間では、読み取り、書き込み、削除はすべてEdgeOneサイトキャッシュ空間に属します。つまり、サイトキャッシュの読み取りのみが可能であり、書き込みと削除も同様に拒否されます。関数内でキャッシュの読み書きを行う必要がある場合は、Requestオブジェクトを使用してeo.cacheKeyを指定するか、非default名前空間を使用してください。eo.cacheKeyを指定するか、非default名前空間を使用します)。読み取り、書き込み、削除には同じRequestオブジェクトを使用し、読み書きのクローズドループを形成します。サイトリソースのキャッシュは引き続きサイトキャッシュルールによって制御されます。eo.cacheKeyは、cache.match、cache.put、cache.deleteの最初のパラメータ(request)を通じて渡されます。Requestオブジェクトを使用して構築します。例えば、new Request(url, { eo: { cacheKey: 'xxx' } })です(詳細はRequestInitEoPropertiesを参照してください)。eo.cacheKeyによって構成されます。3つがすべて同じ場合は同一のキャッシュに対応し、いずれか1つでも異なる場合は相互に分離されます。addEventListener('fetch', (event) => {event.respondWith(handleRequest(event));});async function fetchOrigin(event, cache, cacheKey) {const response = await fetch(event.request);response.headers.set('Cache-Control', 's-maxage=60');event.waitUntil(cache.put(cacheKey, response.clone()));return response;}async function handleRequest(event) {const cache = caches.default;// 読み取り、書き込み、削除には、eo.cacheKeyを指定した同じRequestオブジェクトを使用します。const cacheKey = new Request(event.request.url, {eo: { cacheKey: 'page-home-v1' },});try {let response = await cache.match(cacheKey);if (!response) {response = await fetchOrigin(event, cache, cacheKey);}return response;} catch (error) {// キャッシュ期限切れ(504)などの異常時:古いキャッシュを削除してから、再度オリジンサーバーにアクセスして書き込みます。try {await cache.delete(cacheKey);} catch (e) {}return fetchOrigin(event, cache, cacheKey);}}
caches.defaultを使用すると、デフォルトのcacheインスタンスを取得できます。// デフォルトのcacheインスタンスを取得します。const cache = caches.default;// 効果はcaches.defaultと同等です。await caches.open('default');
caches.openを使用して、指定された名前空間のcacheインスタンスを作成します。// 指定された名前空間のcacheインスタンスを作成します。const cache = await caches.open(namespace);
caches.open(namespace)メソッドのパラメータ説明は以下の通りです。パラメータ名 | タイプ | 必須 | 説明 |
namespace | string | はい | キャッシュの名前空間です。 この値が 「default」の場合、デフォルトインスタンスを表します。また、caches.defaultを直接使用してデフォルトインスタンスを取得することもできます。非default名前空間を使用して作成されたインスタンスの場合、そのキャッシュ操作はすべてエッジ関数独立キャッシュで行われ、EdgeOneサイトキャッシュにはヒットしません。違いの詳細については、キャッシュ空間をご覧ください。 |
cache.match(request: Request | string, options?: MatchOptions): Promise<Response | undefined>
cache.matchは内部から能動的にオリジンサーバーへアクセスしません。キャッシュが期限切れの場合は504エラーを返します。cache.match(new Request('https://example.com/a.html'))です。クライアントリクエストオブジェクト(event.requestなど)を直接渡すと、追加のリクエストヘッダーが含まれるため、ヒットしない可能性があります。パラメータ名 | タイプ | 必須 | 説明 |
request | Request | string | はい | キャッシュリクエストオブジェクト。 requestは GETメソッドのみをサポートします。タイプがstringの場合、URLとしてRequestオブジェクトを構築します。読み取りキャッシュ空間:default名前空間を使用し、かつrequestが eo.cacheKeyを含まない場合、読み取るのはEdgeOneサイトキャッシュです。非default名前空間を使用するか、またはrequestがeo.cacheKeyを含む場合、読み取るのはエッジ関数独立キャッシュです。違いの詳細についてはキャッシュ空間をご覧ください。推奨:エッジ関数独立キャッシュを読み取る際は、cache.put、cache.deleteと同じRequestオブジェクトを使用してください。requestに Rangeヘッダーが含まれる場合、キャッシュされたResponseがRange範囲処理をサポートできるときは、206レスポンスを返します。requestにIf-Modified-Sinceヘッダーが含まれる場合、キャッシュされたResponseに Last-Modifiedヘッダーが存在し、かつLast-ModifiedとIf-Modified-Sinceが等しいとき、304レスポンスを返します。requestにIf-None-Matchヘッダーが含まれる場合、キャッシュされたResponseに ETagヘッダーが存在し、かつETagとIf-None-Matchが等しいとき、304レスポンスを返します。 |
options | いいえ | 設定オプション。 |
属性名 | タイプ | サンプル値 | 説明 |
ignoreMethod | boolean | true | Requestのmethodを無視するかどうかを設定します。trueの場合、Request元のmethodを無視し、GETとして処理します。 |
cache.put(request: Request | string, response: Response): Promise<void>
Promise<undefined>オブジェクトを返します。default名前空間を使用し、かつeo.cacheKeyを含まない場合、書き込みは拒否されます。詳細は以下のパラメータをご覧ください。パラメータ名 | タイプ | 必須 | 説明 |
request | Request | string | はい | キャッシュリクエストオブジェクト。 requestは GETメソッドのみをサポートします。タイプがstringの場合、URLとしてRequestオブジェクトを構築します。default名前空間を使用し、かつ eo.cacheKeyを含まない場合、書き込み先はEdgeOneサイトキャッシュとなり、拒否されてforbidden cdn cacheエラーがスローされます。それ以外の場合、書き込み先はエッジ関数独立キャッシュとなります。その他の違いについてはキャッシュ空間をご覧ください。 |
response | はい | キャッシュ内容について、次のように説明します。 Cache-Control s-maxage、max-age、no-store、no-cache、privateをサポートします。このうち、no-store、no-cache、privateはすべてキャッシュしないことを示し、 cache.putは413エラーを返します。 Pragma ETag Last-Modified 416 Range Not Satisfiable |
cache.putで以下のパラメータ値を使用すると、パラメータエラーが発生します:requestがGETメソッド以外のメソッドです。responseのステータスコードが206 Partial Contentです。 responseにVary: *ヘッダーが含まれています。cache.delete(request: Request | string, options?: DeleteOptions): Promise<boolean>
属性名 | タイプ | サンプル値 | 説明 |
ignoreMethod | boolean | true | requestのメソッド名を無視するかどうかを設定します。trueの場合、Request元のメソッドを無視し、GETとして処理します。 |
フィードバック