• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    一文详解Nginx的强缓存和协商缓存

    发布者: 竹韵9933 | 发布时间: 2025-8-16 18:09| 查看数: 35| 评论数: 0|帖子模式

    一、强缓存(Strong Cache)



    1. 定义

    强缓存直接告诉浏览器:在缓存过期前,无需与服务器通信,直接使用本地缓存。
    由服务器通过响应头
    1. Cache-Control
    复制代码
    1. Expires
    复制代码
    控制。


    2. 响应头

    1. Cache-Control: max-age=3600
    复制代码
    表示资源在 3600 秒(1小时) 内有效(优先级高于
    1. Expires
    复制代码
    )。
    1. Expires: Thu, 31 Dec 2030 23:59:59 GMT
    复制代码
    指定一个绝对过期时间(依赖于客户端本地时间,可能存在误差)。


    3. Nginx 配置示例
    1. location /static/ {
    2.     # 设置强缓存:1年内有效
    3.     add_header Cache-Control "public, max-age=31536000";
    4.     expires 1y;
    5. }
    复制代码

    4. 行为

    浏览器首次请求资源时,服务器返回资源并附带缓存头。
    后续请求时,浏览器直接读取本地缓存(状态码
    1. 200 (from disk cache)
    复制代码
    ),不发送请求到服务器


    5. 适用场景

    静态资源(如 CSS、JS、图片、字体文件)等长期不变的资源。

    二、协商缓存(协商缓存,Weak Cache)

    1. 定义

    协商缓存要求浏览器 每次向服务器验证缓存是否过期,若未过期则返回
    1. 304 Not Modified
    复制代码
    ,继续使用本地缓存。
    由服务器通过响应头
    1. Last-Modified
    复制代码
    1. ETag
    复制代码
    控制。
    2. 响应头

    1. Last-Modified: Wed, 21 Oct 2023 07:28:00 GMT
    复制代码
    表示资源最后修改时间(精度为秒,可能因时间同步问题失效)。
    1. ETag: "5d8c72a5-264"
    复制代码
    资源的唯一标识符(哈希值或版本号),精度更高。
    3. Nginx 配置示例
    1. location /dynamic/ {
    2.     # 启用协商缓存(默认已支持,无需显式配置)
    3.     add_header Last-Modified "";
    4.     etag on;
    5. }
    复制代码
    4. 行为

    浏览器首次请求资源时,服务器返回资源并附带
    1. Last-Modified
    复制代码
    1. ETag
    复制代码

    后续请求时,浏览器通过以下请求头验证缓存:

      1. If-Modified-Since: [Last-Modified值]
      复制代码
      向服务器询问资源是否在指定时间后修改过。
      1. If-None-Match: [ETag值]
      复制代码
      向服务器验证资源的
      1. ETag
      复制代码
      是否变化。
    若资源未修改,服务器返回
    1. 304 Not Modified
    复制代码
    ,浏览器继续使用缓存;若已修改,返回新资源(状态码
    1. 200
    复制代码
    )。
    5. 适用场景

    频繁更新的资源(如 HTML 页面、动态 API 响应)。

    三、关键区别

    特性强缓存协商缓存通信成本无网络请求(直接读缓存)需发送请求验证缓存响应状态码200 (from disk cache)304 Not Modified优先级优先于协商缓存强缓存过期后触发适用资源长期不变的静态资源频繁更新的动态资源
    四、Nginx 最佳实践

    1.混合使用两种缓存
    1. location / {
    2.     # 强缓存 1 小时,过期后启用协商缓存
    3.     add_header Cache-Control "public, max-age=3600";
    4.     etag on;
    5. }
    复制代码
    2.按文件类型区分策略
    1. # 图片、字体等强缓存
    2. location ~* \.(jpg|png|gif|woff2)$ {
    3.     expires 1y;
    4.     add_header Cache-Control "public, max-age=31536000";
    5. }

    6. # HTML 文件禁用强缓存(总是协商)
    7. location ~* \.html$ {
    8.     add_header Cache-Control "no-cache, must-revalidate";
    9. }
    复制代码
    3.解决缓存更新问题
    强缓存资源建议通过 文件名哈希 控制版本(如
    1. main.abcd1234.js
    复制代码
    )。
    协商缓存可通过修改
    1. ETag
    复制代码
    1. Last-Modified
    复制代码
    触发更新。

    五、调试工具

    浏览器开发者工具(Network 标签):

    • 查看
      1. 200 (from disk cache)
      复制代码
      (强缓存)或
      1. 304 Not Modified
      复制代码
      (协商缓存)。
    • 检查请求头中的
      1. Cache-Control
      复制代码
      1. If-Modified-Since
      复制代码
      1. If-None-Match
      复制代码

    命令行工具:
    1. curl -I http://example.com/resource.js
    复制代码
    通过合理配置强缓存和协商缓存,可以显著提升网站性能,减少服务器负载。
    到此这篇关于一文详解Nginx的强缓存和协商缓存的文章就介绍到这了,更多相关Nginx缓存内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:互联网
    免责声明:如果侵犯了您的权益,请联系站长(1277306191@qq.com),我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表