HTTP缓存机制指的是浏览器在向服务器请求资源时,会根据规则对响应结果做出缓存,从而提升了网站响应速度和用户体验。常见的缓存机制主要包括强缓存和协商缓存两种。
强缓存
强缓存是指浏览器在向服务器请求资源时,直接从本地缓存中读取该资源,不经过服务器的验证。强缓存可以通过设置 Expires
或 Cache-Control
首部字段来实现。
Expires
Expires 是 HTTP/1.0 中的字段,用于指定缓存过期时间。浏览器会通过本地时间和 Expires 时间比较来判断资源是否过期。例如:
Expires: Mon, 21 Oct 2022 07:28:00 GMT
Cache-Control
Cache-Control 是 HTTP/1.1 中的字段,用于控制缓存策略,可以指定缓存的时间、是否需要重新验证和是否允许缓存代理服务器等。常见的值包括:
public
:响应可以被任何缓存器缓存private
:响应只能在浏览器中被缓存no-cache
:需要进行服务器验证才能使用缓存max-age
:表示缓存的有效时间,单位为秒。例如:Cache-Control: max-age=3600
表示缓存有效期为一个小时。
协商缓存
协商缓存是指浏览器在向服务器请求资源时,会携带上一次请求的缓存标识(例如 ETag)或者最后修改时间(Last-Modified),由服务器根据这些信息判断资源是否已经被修改过,来决定是否需要重新返回数据。判断结果通过响应头中的 304 Not Modified 状态码来返回给浏览器,如果资源没有被修改,则可以直接从本地读取缓存。
ETag
ETag 是服务器生成的唯一标识符,可以通过 If-None-Match
字段进行传递。
例如:
ETag: "abcdefg"
Last-Modified
Last-Modified 是资源最后修改时间,可以通过 If-Modified-Since
字段进行传递。
例如:
Last-Modified: Tue, 08 May 2018 09:43:57 GMT
示例说明
- 强缓存实现示例:在服务端配置Cache-Control
客户端第一次访问服务器,服务器响应首部字段如下:
HTTP/1.1 200 OK
Cache-Control: max-age=3600
客户端再次发起请求时,如果小于max-age时间,会直接从缓存中获取。实现了强缓存。
- 协商缓存实现示例:在服务端配置 Last-Modified 和 ETag
客户端第一次访问服务器,服务器响应首部字段如下:
HTTP/1.1 200 OK
Last-Modified: Tue, 08 May 2018 09:43:57 GMT
ETag: "abcdefg"
客户端再次发起请求时,通过 If-None-Match
或者 If-Modified-Since
字段进行传递,服务器响应相应数据:
HTTP/1.1 304 Not Modified
客户端可以直接从缓存中获取。实现了协商缓存。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:HTTP的缓存机制是什么? - Python技术站