javascript - 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 中注销响应 - 没有
- 将缓存键从响应 obj 更改为 URL(字符串) - 没有
- 直接等待 cache.put - 什么都没有
- 使用自定义缓存命名空间(所以 await caches.open('pages')) - 没有
基本上,我只是缓存未命中,请求通过我的网络服务器。我可以看到控制台日志,一切运行正常,只是从不缓存或永远找不到缓存。
调试起来非常困难,并且这些方法几乎没有返回任何信息。cache.put 什么都不返回,cache.match 什么都不返回。他们还不如被嘲笑。
我使用牧马人来构建/发布,那里一切正常。
任何人都可以在这里提供帮助吗?
解决方案
我认为您的代码看起来非常简单/有意义。所以,对我来说,下一个可能性似乎是某种数据问题(例如响应格式)。一些标头,例如Cache-Control
,特别是Set-Cookie
会影响它是否可以被缓存 - https://developers.cloudflare.com/workers/runtime-apis/cache#headers
您能否验证您的响应不包含使其无法缓存的内容?如果您能够分享完整的响应,或者只是标题,那也会有所帮助。
推荐阅读
- c++ - 将元素分配给函数类型向量的问题(作为对象的函数)
- python - tf.scatter_nd_update 不断给我一个 AttributeError
- javascript - 如何在 Angular 中处理 RxJS Observables 的异步特性
- python - 如何获取坐标?(tensorflow标签模型物体检测)
- python - Python合并变量
- typescript - Eslint --fix 移除类型注解
- python - 反复保存Conv2D(tensorflow)的结果,覆盖同一个变量
- android - 如何在两个片段之间共享数据?MVVM 架构有问题
- java - 如果第一个字符为零,如何删除第一个字符 | 安卓 | 文本观察器
- c# - 在 SQL 查询中将递归与 CTE 结合使用与在 C# 中使用递归