什么是nginx的强缓存和协商缓存

打印 上一主题 下一主题

主题 962|帖子 962|积分 2886

一、强缓存(Strong Cache)

1. 定义

• 强缓存直接告诉欣赏器:在缓存过期前,无需与服务器通信,直接使用本地缓存。
• 由服务器通过相应头 Cache-ControlExpires 控制。
2. 相应头

Cache-Control: max-age=3600
表示资源在 3600 秒(1小时) 内有效(优先级高于 Expires)。
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. 行为

• 欣赏器首次哀求资源时,服务器返回资源并附带缓存头。
• 后续哀求时,欣赏器直接读取本地缓存(状态码 200 (from disk cache)),不发送哀求到服务器
5. 适用场景

• 静态资源(如 CSS、JS、图片、字体文件)等长期稳定的资源。
二、协商缓存(协商缓存,Weak Cache)

1. 定义

• 协商缓存要求欣赏器 每次向服务器验证缓存是否过期,若未过期则返回 304 Not Modified,继续使用本地缓存。
• 由服务器通过相应头 Last-ModifiedETag 控制。
2. 相应头

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


  • 欣赏器首次哀求资源时,服务器返回资源并附带 Last-Modified 或 ETag。
  • 后续哀求时,欣赏器通过以下哀求头验证缓存:
    If-Modified-Since: [Last-Modified值]
    向服务器扣问资源是否在指定时间后修改过。
    If-None-Match: [ETag值]
    向服务器验证资源的 ETag 是否变化。
  • 若资源未修改,服务器返回 304 Not Modified,欣赏器继续使用缓存;若已修改,返回新资源(状态码 200)。
5. 适用场景

• 频繁更新的资源(如 HTML 页面、动态 API 相应)。
三、关键区别

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


  • 混淆使用两种缓存
    1. location / {
    2.     # 强缓存 1 小时,过期后启用协商缓存
    3.     add_header Cache-Control "public, max-age=3600";
    4.     etag on;
    5. }
    复制代码
  • 按文件类型区分策略
    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. }
    复制代码
  • 解决缓存更新题目
    • 强缓存资源发起通过 文件名哈希 控制版本(如 main.abcd1234.js)。
    • 协商缓存可通过修改 ETag 或 Last-Modified 触发更新。
五、调试工具


  • 欣赏器开发者工具(Network 标签):
    • 查看 200 (from disk cache)(强缓存)或 304 Not Modified(协商缓存)。
    • 检查哀求头中的 Cache-Control、If-Modified-Since、If-None-Match。
  • 命令行工具:
    1. curl -I http://example.com/resource.js
    复制代码
通过合理配置强缓存和协商缓存,可以显著提升网站性能,减少服务器负载。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

不到断气不罢休

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表