Cloudflare Workers - 有选择地缓存 HTML 内容
Cloudflare Workers - selectively cache HTML content
我想创建一个 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
}
}
这个调用有问题:
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 } });
我想创建一个 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
}
}
这个调用有问题:
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 } });