ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、视频、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# 缓存API ## 缓存对象 缓存API允许对缓存的读写进行精细控制,并确定何时从源中提取数据。 对于每个单独的区域,Cloudflare Workers运行时都会公开一个全局缓存对象:`caches.default`。尽管此缓存对象在Cloudflare的所有数据中心上均存在,但对象不会复制到任何其他数据中心。请注意,该个性化区域缓存对象不同于Cloudflare的Global CDN,有关详细信息,请参阅:[使用缓存](https://developers.cloudflare.com/workers/about/using-cache)。 ### 句法 该API受Web浏览器的Cache API的强烈影响,但是有一些重要的区别。例如,Cloudflare Workers运行时公开单个全局缓存对象。 ~~~javascript let cache = caches.default ~~~ ### 在预览中 目前在Cloudflare Workers预览中未实现Service Workers Cache API。预览器中的缓存API操作不会有影响。要进行测试,必须在区域上部署Worker。 ### 方法 #### `put` 将键入给定请求的响应添加到缓存中。返回一个承诺,该承诺将`undefined`在缓存存储响应后解析为。 ##### 句法 ~~~javascript cache.put(request, response) ~~~ ##### 参量 * `request`:字符串或[`Request`](https://developers.cloudflare.com/workers/reference/apis/request)对象均用作键。如果传递了字符串,则将其解释为新Request对象的URL。 * `response`:[`Response`](https://developers.cloudflare.com/workers/reference/apis/response)要在给定密钥下存储的对象。 ##### 无效的参数 * `cache.put`在以下情况下引发错误: * 所述`request`传递比以外的方法`GET` * 在`response`传递是`status`的[`206 Partial Content`](https://httpstatuses.com/206) * 所述`response`传递包含标题`Vary: _`(由Cache API规范需要) ##### 标头 我们的Cache API实现在传递给的响应中遵循以下HTTP标头`put()`: * `Cache-Control`:控制缓存指令。这与[Cloudflare Cache-Control Directives](https://support.cloudflare.com/hc/en-us/articles/115003206852-Origin-Cache-Control#h_4250342181031546894839080)一致。另请参见[过期缓存对象](https://developers.cloudflare.com/workers/reference/apis/cache/#expiring-cache-objects)。 * `Cache-Tag`:以后允许通过标签清除资源(仅企业)。 * `ETag`:允许`cache.match()`使用评估条件请求`If-None-Match`。 * `Expires`:指定资源何时无效的字符串。另请参见[过期缓存对象](https://developers.cloudflare.com/workers/reference/apis/cache/#expiring-cache-objects)。 * `Last-Modified`:允许`cache.match()`使用评估条件请求`If-Modified-Since`。 这不同于Web浏览器的Cache API,因为它们不接受请求或响应上的任何标头。 **注意:**`Set-Cookie`永远不会缓存带有标头的响应,因为这有时表明响应包含唯一数据。要存储带有`Set-Cookie`标题`Cache-Control: private=Set-Cookie`的响应,请在调用之前删除该标题或在响应上进行设置`cache.put()`。 使用此`Cache-Control`方法存储不带`Set-Cookie`标题的响应。 #### `match` 返回包装了键入该请求的响应对象的promise。 ##### 句法 ~~~javascript cache.match(request, options) ~~~ ##### 参量 * `request`:[`Request`](https://developers.cloudflare.com/workers/reference/apis/request)用作查找键的字符串或对象。字符串被解释为新`Request`对象的URL。 * `options`:可以包含一个可能的属性: * `ignoreMethod`(布尔值):无论请求方法的实际值如何,都将其视为GET。 与浏览器Cache API不同,Cloudflare Workers不支持上的`ignoreSearch`或`ignoreVary`选项`match()`。您可以通过一次删除查询字符串或HTTP标头来实现此行为`put()`。 我们的Cache API实现在传递给的请求中遵循以下HTTP标头`match()`: * `Range`:`206`如果找到匹配的响应,则会产生响应。即使`Accept-Ranges`响应中包含标头,您的Cloudflare缓存也始终遵守范围请求。 * `If-Modified-Since`:`304`如果找到匹配的响应,并且`Last-Modified`标题的值在中指定的时间之后,则会产生响应`If-Modified-Since`。 * `If-None-Match`:`304`如果找到匹配的响应,并且其`ETag`标头的值与中的值相匹配,则会产生响应`If-None-Match`。 `cache.match()`:从不向源发送子请求。如果在缓存中找不到匹配的响应,则使用`cache.match()`来满足返回的诺言`undefined`。 #### `delete` `Response`从缓存中删除对象,并`Promise`为布尔响应返回a: * `true`:响应已缓存,但现在已删除 * `false`:删除时响应不在缓存中。 ##### 句法 ~~~javascript cache.delete(request, options) ~~~ ##### 参量 * `request`:查找关键字,为字符串或[`Request`](https://developers.cloudflare.com/workers/reference/apis/request)对象。字符串被解释为新`Request`对象的URL。 * `options`:可以包含以下属性之一: * `ignoreMethod`(布尔值):将请求方法视为`GET`,而不考虑其实际值。 ## 更多信息 [使用缓存](https://developers.cloudflare.com/workers/about/using-cache)