【问题标题】:Cloudflare Workers - selectively cache HTML contentCloudflare Workers - 选择性地缓存 HTML 内容
【发布时间】:2019-03-16 12:41:57
【问题描述】:

我想创建一个 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 
  }
}

【问题讨论】:

    标签: cloudflare-workers


    【解决方案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 } });
    

    【讨论】:

    • 谢谢,将它分成两行有效。在实际代码中,我确实更改了 url,为了简化示例,我省略了它。
    猜你喜欢
    • 2020-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多