Acabo de pasar un día entero en este simple trabajador y no he llegado a ninguna parte.
He seguido los ejemplos de Cache API en el sitio de CloudFlare y también he rastreado las publicaciones de StackOverflow, pero todavía no estoy en ninguna parte.
Esta publicación ( Problema con la API de caché de trabajo de Cloudflares ) parecía ser lo que necesitaba, pero no ayudó.
Esencialmente, todo lo que intento hacer es almacenar en caché ciertas páginas durante un período de tiempo utilizando la API de caché. Eventualmente tendré que hacer cachés específicos por código de país (es por eso que estoy usando trabajadores y no reglas de página), pero por ahora todo lo que intento hacer es hacer que la API de caché básica funcione como prueba.
Aquí está el código, es básicamente el mismo código del ejemplo en su sitio
manejador.ts
export async function handleRequest(event: FetchEvent): Promise<Response> { const { request } = event const cacheUrl = new URL(request.url) const cacheKey = new Request(cacheUrl.toString(), request) const cache = caches.default let response = await cache.match(cacheKey) if (!response) { console.log('NO CACHE MATCH') // If not in cache, get it from origin response = await fetch(request) // Must use Response constructor to inherit all of response's fields response = new Response(response.body, response) response.headers.append('Cache-Control', 's-maxage=10') event.waitUntil(cache.put(cacheKey, response.clone())) } return response }índice.ts
import { handleRequest } from './handler' addEventListener('fetch', (event) => { event.respondWith(handleRequest(event)) })Soy consciente de que no puede usar la API de caché en el dominio workers.dev, por lo que implementé el trabajador en un dominio personalizado para que tenga acceso a la API.
Yo he tratado
Básicamente, solo obtengo errores de caché y la solicitud se envía a mi servidor web. Puedo ver el registro de la consola, todo funciona bien, simplemente nunca almacena en caché o nunca encuentra el caché.
Es increíblemente difícil de depurar y casi no se devuelve información de estos métodos. cache.put no devuelve nada, cache.match no devuelve nada. Bien podrían ser objeto de burla.
Estoy usando wrangler para compilar/publicar, y todo funciona bien allí.
¿Alguien puede ayudar aquí?
Creo que su código parece bastante sencillo/tiene sentido. Entonces, me parece que la siguiente posibilidad es algún tipo de problema de datos (por ejemplo, con el formato de respuesta). Algunos encabezados, como Cache-Control y específicamente Set-Cookie afectarán si se pueden almacenar en caché: https://developers.cloudflare.com/workers/runtime-apis/cache#headers
¿Puedes verificar que tu respuesta no contenga algo que la haga imposible de almacenar en caché? Si puede compartir la respuesta completa, o solo los encabezados, eso también ayudaría.