Cloudflare Workers-选择性缓存HTML内容

时间:2018-10-11 12:20:20

标签: cloudflare-workers

我要创建一个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 个答案:

答案 0 :(得分:0)

这个电话是问题所在

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