强缓存和协商缓存是什么
时间: 2025-01-05 15:12:41 浏览: 12
### HTTP 缓存机制概述
HTTP 协议提供了多种缓存控制方法来优化网络性能并减少服务器负载。主要分为两种类型的缓存策略:强缓存和协商缓存。
#### 强缓存 (Strong Cache)
当浏览器请求资源时,如果该资源被标记为可由客户端本地存储,则可以直接从浏览器缓存读取而无需再次向服务器发起请求。这通过响应头中的特定字段实现:
- `Cache-Control` 和 `Expires` 是两个用于定义资源有效期的关键字。
- 如果设置了 `Cache-Control: max-age=<seconds>` 或者存在有效的 `Expires` 头部,那么在这段时间内,浏览器会认为此内容是最新的,并不会发送任何额外的验证请求到源站获取最新版本的内容[^1]。
这种模式极大地提高了访问速度并且节省带宽消耗,因为整个过程完全发生在用户的设备上而不涉及外部通信。
```http
GET /image.png HTTP/1.1
Host: example.com
HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
ETag: "34aa387-d-1e3fbc80"
Accept-Ranges: bytes
Content-Length: 51
Vary: Accept-Encoding
Content-Type: image/png
Cache-Control: public, max-age=31536000
```
#### 协商缓存 (Negotiated Cache)
对于那些可能频繁更新或需要更精确控制其新鲜度状态的对象来说,采用的是基于条件式的重新验证方式——即所谓的“协商缓存”。在这种情况下,即使有可用的本地副本,在每次加载页面之前都会先询问原始服务器确认这些数据是否仍然有效。
常用的方法包括利用如下头部信息来进行比较判断:
- `If-None-Match`: 客户端携带 ETag 值给服务端对比;
- `If-Modified-Since`: 使用最后修改时间戳作为参照标准;
一旦发现当前保存的数据已经过期或是发生了变化,就会返回完整的实体主体以及相应的元数据供前端刷新显示;反之则仅需回应一个简单的 `304 Not Modified` 状态码告知对方可以继续沿用旧有的记录即可[^2]。
```http
GET /index.html HTTP/1.1
Host: www.example.org
If-None-Match: "33a6c576aeedfc1eace167b9b3f2dcb3"
HTTP/1.1 304 Not Modified
Date: Tue, 28 Jul 2009 12:28:53 GMT
Server: Apache
Etag: "33a6c576aeedfc1eace167b9b3f2dcb3"
```
---
阅读全文