CloudFlare Worker Cache API 不存储获取结果

CloudFlare Worker Cache API Not Storing Fetch Results

我刚刚在这个简单的 worker 上花了一整天,却一无所获。

我关注了 CloudFlare 网站上的 Cache API 示例,还浏览了 Whosebug postings,但我仍然一无所获。

这个 post () 看起来像是我需要的,但它没有帮助。

基本上我所做的就是使用缓存 API 将某些页面缓存一段时间。我最终需要为每个国家代码做特定的缓存(这就是为什么我使用工作人员而不是页面规则)但是现在我试图做的就是让基本缓存 API 作为测试工作。

这是代码,与他们网站上的示例代码基本相同

handler.ts

export async function handleRequest(event: FetchEvent): Promise<Response> {
  const { request } = event
  const cacheUrl = new URL(request.url)
  const cacheKey = new Request(cacheUrl.toString(), request)
  const cache = caches.default

  let response = await cache.match(cacheKey)
  if (!response) {
    console.log('NO CACHE MATCH')
    // If not in cache, get it from origin
    response = await fetch(request)
    // Must use Response constructor to inherit all of response's fields
    response = new Response(response.body, response)
    response.headers.append('Cache-Control', 's-maxage=10')
    event.waitUntil(cache.put(cacheKey, response.clone()))
  } 
  return response
}

index.ts

import { handleRequest } from './handler'

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

我知道您不能在 workers.dev 域中使用缓存 API,因此我已将 worker 部署到自定义域,因此它应该可以访问 API。

我试过了

基本上,我只是遇到缓存未命中并且请求通过我的网络服务器。我可以看到控制台日志,一切正常 运行,只是从不缓存或从未找到缓存。

调试起来非常困难,而且这些方法几乎没有返回任何信息。 cache.put returns 没什么,cache.match returns 没什么。他们还不如被嘲笑。

我正在使用 wrangler 构建/发布,一切正常。

有人可以帮忙吗?

我认为您的代码看起来非常简单/有道理。所以,对我来说,下一个可能性似乎是某种数据问题(例如响应格式)。一些 headers,比如 Cache-Control,特别是 Set-Cookie 会影响它是否可以被缓存 - https://developers.cloudflare.com/workers/runtime-apis/cache#headers

您能否确认您的响应不包含使其无法缓存的内容?如果您能够分享完整的回复,或者只是 headers,那也会有所帮助。