Use the Cache API
Use the Cache API to store R2 objects in Cloudflare’s cache.
export default {async fetch(request, env, context) {try {const url = new URL(request.url);// Construct the cache key from the cache URLconst cacheKey = new Request(url.toString(), request);const cache = caches.default;// Check whether the value is already available in the cache// if not, you will need to fetch it from R2, and store it in the cache// for future accesslet response = await cache.match(cacheKey);if (response) {console.log(`Cache hit for: ${request.url}.`);return response;}console.log(`Response for request url: ${request.url} not present in cache. Fetching and caching request.`);// If not in cache, get it from R2const objectKey = url.pathname.slice(1);const object = await env.MY_BUCKET.get(objectKey);if (object === null) {return new Response('Object Not Found', { status: 404 });}// Set the appropriate object headersconst headers = new Headers();object.writeHttpMetadata(headers);headers.set('etag', object.httpEtag);// Cache API respects Cache-Control headers. Setting s-max-age to 10// will limit the response to be in cache for 10 seconds max// Any changes made to the response here will be reflected in the cached valueheaders.append('Cache-Control', 's-maxage=10');response = new Response(object.body, {headers,});// Store the fetched response as cacheKey// Use waitUntil so you can return the response without blocking on// writing to cachecontext.waitUntil(cache.put(cacheKey, response.clone()));return response;} catch (e) {return new Response('Error thrown ' + e.message);}},};