58 Nginx中浏览器缓存的执行流程
58 Nginx中浏览器缓存的执行流程
58.1 说明
HTTP协议中与页面缓存相关的字段
| header | 说明 |
| Expires | 缓存过期日期和时间 |
| Cache-Control | 设置和缓存相关的配置信息 |
| Last-Modified | 请求资源最后修改时间(资源在服务端的修改时间) |
| Etag | 请求变量的实体标签的当前值,比如文件的MD5值 |
# Response Headers 中内容 HTTP/1.1 200 OK Server: nginx/1.16.1 Date: Sat, 16 May 2026 09:43:38 GMT Content-Type: application/javascript Content-Length: 7435 Last-Modified: Thu, 14 May 2026 08:55:52 GMT Connection: keep-alive Vary: Accept-Encoding ETag: "6a058e18-1d0b" Content-Encoding: gzip
58.2 缓存流程

1.首次访问不存在缓存:用户 -> 浏览器发送请求 -> 判断是否有缓存:否 -> 向web服务器发送请求 -> 请求响应200、缓存协商(产生缓存) -> 展示给用户
2.存在缓存且未过期:用户 -> 浏览器发送请求 -> 判断是否有缓存:是 -> 判断缓存是否过期:否 -> 从缓存中获取数据 -> 展示给用户(强缓存)
3.存在缓存过期但服务端内容未变,服务端决策返回304:用户 -> 浏览器发送请求 -> 判断是否有缓存:是 -> 判断缓存是否过期:是 -> (判断Etag / 判断 Last-Modified):是 -> (向web服务器请求带 if-None-Match 、 向web服务器请求带 if-Modified-Since)客户端、服务端对比值:一致 -> 服务器进行决策返回 304 状态码 -> 从缓存中获取数据 -> 展示给用户(弱缓存)
4.存在缓存过期但服务端内容未变,服务端决策返回200:用户 -> 浏览器发送请求 -> 判断是否有缓存:是 -> 判断缓存是否过期:是 -> (判断Etag / 判断 Last-Modified):是 -> (向web服务器请求带 if-None-Match 、 向web服务器请求带 if-Modified-Since)客户端、服务端对比值:不一致 -> 服务器进行决策返回 200 状态码 -> 请求响应、缓存协商(产生新缓存) -> 展示给用户
5.存在缓存过期但服务端内容改变:用户 -> 浏览器发送请求 -> 判断是否有缓存:是 -> 判断缓存是否过期:是 -> (判断Etag / 判断 Last-Modified):否 -> 向web服务器发送请求 -> 请求响应、缓存协商(产生新缓存) -> 展示给用户
强缓存:不发送请求到服务端,直接从本地缓存中获取访问资源
弱缓存:发送请求到服务端,服务端判断后响应 200、304,再从本地缓存中获取访问资源
———————————————————————————————————————————————————————————————————————————
无敌小马爱学习
浙公网安备 33010602011771号