# 缓存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)
- 关于本翻译文档
- 快速开始
- 模版库
- 讲解
- Workers页面
- 从0开始
- 从已有页面开始
- 从已有Worder开始
- 工具
- Cli工具 wrangler
- 安装
- 指令
- 配置
- 环境
- Webpack
- 密钥
- KV
- 网站
- Playground
- ServerLess插件
- Terraform
- REST API
- Making Requests
- Scripts
- Bindings
- Routes
- Integrations
- 相关
- 工作原理
- 安全
- 使用缓存
- 价格
- Routes
- Limits
- 提示
- 调试技巧
- 调试header
- FetchEvent生命周期
- 请求上下文
- 请求sign
- 参考
- runtime API
- Web Standards
- fetch
- fetchEvent
- Response
- Request
- KV
- Environment Variables
- Streams
- Encoding
- Web Crypto
- Cache API
- HTMLRewriter
- Workers KV
- Use cases
- Namespaces
