首页 > 解决方案 > CloudFlare Worker Cache API 不存储获取结果

问题描述

我刚刚花了一整天的时间在这个简单的工人身上,但我一无所获。

我已经关注了 CloudFlare 站点上的 Cache API 示例,并且还浏览了 StackOverflow 的帖子,但我仍然无处可去。

这篇文章(Cloudflares Worker Cache API出现问题)看起来是我需要的,但它没有帮助。

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

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

处理程序.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
}

索引.ts

import { handleRequest } from './handler'

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

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

我试过了

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

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

我使用牧马人来构建/发布,那里一切正常。

任何人都可以在这里提供帮助吗?

标签: javascriptcloudflarecloudflare-workers

解决方案


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

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


推荐阅读