浏览器缓存的读取规则涉及多个方面,包括 HTTP 缓存机制、缓存控制头(Cache-Control)、ETag、Last-Modified 等。
1. HTTP 缓存控制头
Cache-Control:这个头部定义了缓存的行为。常见的指令包括:
no-cache
:强制重新验证缓存的资源。no-store
:不缓存任何内容。max-age=<seconds>
:指定资源在此时间内是有效的,不需要重新请求。public
:响应可以被任何缓存存储。private
:响应只能被用户的浏览器缓存,不能被共享缓存存储。
Expires:一个 HTTP 头部字段,指明资源过期的时间,早于这个时间,浏览器会认为资源已经过期。
2. 条件请求
- 使用 ETag(实体标签)和 Last-Modified 头部,浏览器可以向服务器发送条件请求。
- ETag:服务器生成的唯一标识符,用于标识特定版本的资源。如果资源未改变,服务器返回 304 Not Modified 响应,即浏览器可继续使用缓存。
- Last-Modified:指明资源的最后修改时间,浏览器可以使用
If-Modified-Since
头部进行请求。
3. 缓存策略
- 当请求一个资源时,浏览器会首先检查本地缓存。如果资源在缓存中且未过期,则直接使用缓存。
- 如果资源在缓存中但已过期,浏览器会发送请求到服务器,可能会使用条件请求。
- 如果服务器返回 304 状态码,表示资源没有修改,浏览器将继续使用缓存的版本。
- 如果返回 200 状态码,则会下载新的资源并更新本地缓存。
4. Cache Storage
- 对于 PWA(渐进式网页应用),浏览器还支持更复杂的缓存策略,可以使用 Service Workers 来控制缓存的行为,例如缓存 API 请求的响应。
5. 应用场景
- 静态资源(如 CSS、JavaScript 和图片)通常会有较长的缓存时间。
- 动态内容(如用户数据)一般会设置短缓存时间,或使用其他策略来确保数据的新鲜度。
小结
了解这些规则能帮助开发者合理利用浏览器缓存,从而提升网页的性能和用户体验。在实施缓存策略时,需要考虑内容的更新频率和用户的需求,以平衡性能和数据的新鲜度。