HTTP协议中的缓存机制是指客户端和服务器保存资源拷贝的机制,用于减少网络流量和提高资源访问速度。
主要的缓存策略有:
- 强缓存(Cache-Control):通过Cache-Control Header指定资源在什么情况下进行缓存,分为public、private、no-cache等指令。
- 协商缓存(Last-Modified / ETag):通过Last-Modified 和 ETag Header判断资源是否变化,资源未变化返回304状态码使用缓存。
- 过期缓存(Expires):通过Expires Header指定资源的过期时间,在过期时间内使用缓存,过期后向服务器验证资源状态。
代码示例:
服务器返回资源并明确指定缓存时间为1小时:
HTTP/1.1 200 OK
Server: Apache
Expires: Thu, 01 Dec 2020 16:00:00 GMT
Content-Type: text/html
<html>...</html>
客户端在55分钟内再次请求资源:
GET / HTTP/1.1
客户端使用本地缓存并不向服务器发送请求。
服务器返回资源并通过ETag实现协商缓存:
HTTP/1.1 200 OK
Server: Apache
ETag: "1a2b3c4d"
Content-Type: text/html
<html>...</html>
客户端在资源发生变化前再次请求:
GET / HTTP/1.1
If-None-Match: "1a2b3c4d"
服务器返回304未修改:
HTTP/1.1 304 Not Modified
Server: Apache
ETag: "1a2b3c4d"
客户端继续使用缓存资源。