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 } });