跳转到内容
搜索文档

使用 Workers 自定义缓存行为

最后更新 查看 MarkdownAgent 设置

您可以使用 Workers 在 Cloudflare 网络上自定义缓存行为。Workers 在请求生命周期中作为中间件运行——单个 Worker 处理请求和响应两个阶段。当请求到达时,它在检查缓存之前命中 Worker。Worker 可以修改传入请求(例如,重写 URL 或添加标头),然后调用 fetch() 使请求继续通过缓存。当响应返回时——无论来自缓存还是源站服务器——Worker 也可以在发送给访问者之前修改响应。

下图说明了 Workers 与 Cache 之间常见的交互流程。

Workers 与缓存流示例流程图。
  1. 访问者 (a) 请求 URL,此请求被定向到 Worker。Worker 然后可以与请求交互,使用 (b) fetch() 从源站服务器请求内容,或向访问者发送 (f) 响应。
  2. 如果内容被缓存,缓存向 Worker 发送 (e) 响应,Worker 可以在向访问者发送 (f) 响应之前修改响应。
  3. 在 Workers 中使用缓存规则时,缓存规则必须匹配 fetch() (b) 请求中 URL 的属性——如标头、主机名或 URL 路径——而非原始访问者 URL/主机 (a)。否则,规则将不会应用。

以下是 Workers 可用于自定义缓存行为的一些示例:

  • Modify Response:从缓存检索内容后调整或增强内容,确保响应是最新的或针对特定需求定制。

  • Signed URLs:生成有时间限制的签名 URL 以控制访问并增强安全性。

  • Personalized Response:基于用户数据提供个性化内容,同时使用缓存资源以减少源站服务器负载。

  • Reduce Latency:从靠近访问者的数据中心提供内容,减少加载时间并改善用户体验。

您还可以使用 Snippets 进行轻量级修改,如标头更改、重定向和 JWT 验证,而无需部署完整的 Worker 脚本。Snippets 在所有付费计划中免费包含,但有更严格的资源限制(5 ms 执行时间,32 KB 包大小)。

Workers 中的缓存功能

Workers 提供两种与缓存交互的方式。当 Worker 向源站发出子请求时使用 fetch()。当 Worker 在没有后端源站的情况下生成响应时使用 Cache API。

  • fetch():当 Worker 调用 fetch() 时,请求通过 Cloudflare 的缓存和 Tiered Cache(如果已启用)。您可以通过在请求的 cf 对象上设置属性来控制缓存行为——包括 time-to-live (TTL) 值、自定义缓存键和缓存标头。有关更多详情,请参阅使用 fetch 缓存

  • Cache API:允许您使用 caches.defaultcaches.open() 以编程方式在 Cloudflare 缓存中存储、检索和删除响应。与 fetch() 不同,Cache API 仅操作处理当前请求的数据中心中的缓存——它不与 Tiered Cache 交互。当您需要缓存非来自源站的响应时使用 Cache API。有关更多详情,请参阅使用 Cache API

要了解更多关于 Cache 和 Workers 如何交互的信息,请参阅 Workers 中的 Cache

这篇文档对您有帮助吗?