HTTP协议中的缓存机制是什么?有哪些缓存策略?代码举例讲解

HTTP协议中的缓存机制是指客户端和服务器保存资源拷贝的机制,用于减少网络流量和提高资源访问速度。

主要的缓存策略有:

  1. 强缓存(Cache-Control):通过Cache-Control Header指定资源在什么情况下进行缓存,分为public、private、no-cache等指令。
  2. 协商缓存(Last-Modified / ETag):通过Last-Modified 和 ETag Header判断资源是否变化,资源未变化返回304状态码使用缓存。
  3. 过期缓存(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"

客户端继续使用缓存资源。