Cloudflare Workers - выборочно кешировать HTML-контент

Я хочу создать Cloudflare Worker, который будет выборочно кэшировать содержимое HTML-страницы, эквивалентное тому, если бы у меня было правило страницы для уровня кеша = кешировать все, пограничный кеш TTL=30 минут

Запросы, проходящие через приведенный ниже упрощенный рабочий код, никогда не попадают в кеш, вместо этого каждый раз отправляя запрос из моего источника. Есть идеи, что мне здесь не хватает?

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const url = new URL(request.url)

  if (request.method == "GET" && url.pathname == "/foo/bar") {
    newurl=url.protocol + "//" + url.hostname + url.pathname + "?" + url.search
    let response = await fetch(newurl, request, { cf: { cacheTtl: 1800 } })
    response = new Response(response.body, response)
    response.headers.delete("pragma")
    return response
  } else {
    const response = await fetch(request) 
    return response 
  }
}

1 ответ

Решение

Этот вызов является проблемой:

fetch(newurl, request, { cf: { cacheTtl: 1800 } })

fetch() принимает два параметра, а не три. Соглашение о вызовах JavaScript игнорирует дополнительные параметры, поэтому ваш { cf: { cacheTtl: 1800 } } игнорируется.

Похоже, что вы на самом деле не вносите изменения в URL, так что, возможно, вы могли бы просто сделать:

fetch(request, { cf: { cacheTtl: 1800 } })

Если вы действительно хотите переписать URL-адрес, вам потребуется двухэтапный процесс:

request = new Request(newurl, request);
let response = await fetch(request, { cf: { cacheTtl: 1800 } });
Другие вопросы по тегам