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 缓存流程

1581762832290

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,再从本地缓存中获取访问资源

 

———————————————————————————————————————————————————————————————————————————

                                                                                                                         无敌小马爱学习

posted on 2026-05-16 01:32  马俊南  阅读(5)  评论(0)    收藏  举报