一、强缓存(Strong Cache)
1. 定义
强缓存直接告诉浏览器:在缓存过期前,无需与服务器通信,直接使用本地缓存。
由服务器通过响应头和控制。
2. 响应头
- Cache-Control: max-age=3600
复制代码 表示资源在 3600 秒(1小时) 内有效(优先级高于)。- Expires: Thu, 31 Dec 2030 23:59:59 GMT
复制代码 指定一个绝对过期时间(依赖于客户端本地时间,可能存在误差)。
3. Nginx 配置示例
- location /static/ {
- # 设置强缓存:1年内有效
- add_header Cache-Control "public, max-age=31536000";
- expires 1y;
- }
复制代码
4. 行为
浏览器首次请求资源时,服务器返回资源并附带缓存头。
后续请求时,浏览器直接读取本地缓存(状态码),不发送请求到服务器。
5. 适用场景
静态资源(如 CSS、JS、图片、字体文件)等长期不变的资源。
二、协商缓存(协商缓存,Weak Cache)
1. 定义
协商缓存要求浏览器 每次向服务器验证缓存是否过期,若未过期则返回,继续使用本地缓存。
由服务器通过响应头和控制。
2. 响应头
- Last-Modified: Wed, 21 Oct 2023 07:28:00 GMT
复制代码 表示资源最后修改时间(精度为秒,可能因时间同步问题失效)。资源的唯一标识符(哈希值或版本号),精度更高。
3. Nginx 配置示例
- location /dynamic/ {
- # 启用协商缓存(默认已支持,无需显式配置)
- add_header Last-Modified "";
- etag on;
- }
复制代码 4. 行为
浏览器首次请求资源时,服务器返回资源并附带或。
后续请求时,浏览器通过以下请求头验证缓存:
- If-Modified-Since: [Last-Modified值]
复制代码 向服务器询问资源是否在指定时间后修改过。
- 向服务器验证资源的是否变化。
若资源未修改,服务器返回,浏览器继续使用缓存;若已修改,返回新资源(状态码)。
5. 适用场景
频繁更新的资源(如 HTML 页面、动态 API 响应)。
三、关键区别
特性强缓存协商缓存通信成本无网络请求(直接读缓存)需发送请求验证缓存响应状态码200 (from disk cache)304 Not Modified优先级优先于协商缓存强缓存过期后触发适用资源长期不变的静态资源频繁更新的动态资源
四、Nginx 最佳实践
1.混合使用两种缓存- location / {
- # 强缓存 1 小时,过期后启用协商缓存
- add_header Cache-Control "public, max-age=3600";
- etag on;
- }
复制代码 2.按文件类型区分策略- # 图片、字体等强缓存
- location ~* \.(jpg|png|gif|woff2)$ {
- expires 1y;
- add_header Cache-Control "public, max-age=31536000";
- }
- # HTML 文件禁用强缓存(总是协商)
- location ~* \.html$ {
- add_header Cache-Control "no-cache, must-revalidate";
- }
复制代码 3.解决缓存更新问题
强缓存资源建议通过 文件名哈希 控制版本(如)。
协商缓存可通过修改或触发更新。
五、调试工具
浏览器开发者工具(Network 标签):
- 查看(强缓存)或(协商缓存)。
- 检查请求头中的、、。
命令行工具:- curl -I http://example.com/resource.js
复制代码 通过合理配置强缓存和协商缓存,可以显著提升网站性能,减少服务器负载。
到此这篇关于一文详解Nginx的强缓存和协商缓存的文章就介绍到这了,更多相关Nginx缓存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
来源:互联网
免责声明:如果侵犯了您的权益,请联系站长(1277306191@qq.com),我们会及时删除侵权内容,谢谢合作! |
|