面试官:Cache-Control 等缓存机制一般是前端配置还是后端配置?

06-01 1114阅读

回答思路
  1. 静态资源缓存(Cache-Control、ETag、Last-Modified) 通常是后端(或 CDN)配置的,因为 HTTP 头部是由服务器返回的,前端无法直接修改服务器响应头。

  2. 前端可以通过  标签、Service Worker 以及 Web Storage(如 localStorage)对部分资源进行缓存控制,但对于 HTTP 级别的缓存,通常依赖后端或 CDN。


1. Cache-Control 配置(通常由后端或 CDN 设置)

Cache-Control 头部用于控制浏览器和 CDN 的缓存行为,前端无法直接修改 HTTP 头部,而是由后端服务器(如 Nginx、Apache、Node.js)或 CDN 进行配置。

location /static/ {
    expires 1y;
    add_header Cache-Control "public, max-age=31536000, immutable";
}
  • public:允许任何人(包括 CDN)缓存资源。

  • max-age=31536000(1年):静态资源缓存 1 年,避免重复请求。

  • immutable:表示该资源不会改变,即使用户刷新页面也不会重新请求。


    2. ETag 和 Last-Modified(后端控制)

    这两个 HTTP 头用于判断资源是否发生变化,以避免不必要的下载:

    • ETag(实体标签): 服务器给资源生成一个唯一的标识符(哈希值),如果内容未变,返回 304 Not Modified。

    • Last-Modified(最后修改时间): 浏览器请求时带上 If-Modified-Since 头,如果资源没有更新,服务器返回 304。

      Nginx 服务器启用 ETag 和 Last-Modified(默认开启):

      location /images/ {
          expires 30d;
          etag on;
          add_header Last-Modified $date_gmt;
      }

      3. 前端可以做的缓存优化

      虽然 HTTP 缓存通常由 后端/CDN 负责,但前端也可以通过一些方式优化缓存:

      (1) meta 头部(限制页面缓存)

      前端可以用  标签来控制页面缓存,例如:

      
      
      • no-cache:浏览器必须向服务器验证资源是否过期(但仍可用 ETag 和 Last-Modified)。

      • no-store:浏览器不会缓存该资源,每次都重新下载。

      • must-revalidate:如果缓存过期,必须重新请求。

        面试官:Cache-Control 等缓存机制一般是前端配置还是后端配置?
        (图片来源网络,侵删)
        (2) 使用 Service Worker(前端缓存资源)

        前端可以使用 Service Worker 在 Cache Storage 里缓存 API 数据或静态资源,实现离线访问:

        self.addEventListener("fetch", event => {
          event.respondWith(
            caches.match(event.request).then(response => {
              return response || fetch(event.request);
            })
          );
        });
        (3) 利用 LocalStorage 存储 API 数据

        如果是 API 数据,前端可以用 localStorage 进行缓存:

        面试官:Cache-Control 等缓存机制一般是前端配置还是后端配置?
        (图片来源网络,侵删)
        const data = localStorage.getItem("userData");
        if (data) {
          console.log("从缓存加载数据", JSON.parse(data));
        } else {
          fetch("/api/user")
            .then(res => res.json())
            .then(data => {
              localStorage.setItem("userData", JSON.stringify(data));
            });
        }

        4. 一般是前端还是后端配置?
        优化方案前端负责后端/CDN 负责
        Cache-Control

        ✅ 服务器/CDN 配置

        面试官:Cache-Control 等缓存机制一般是前端配置还是后端配置?
        (图片来源网络,侵删)
        ETag

         / Last-Modified

        ✅ 服务器生成哈希或时间戳

        meta

         标签缓存控制

        Service Worker

        LocalStorage 缓存


        5. 面试官最佳回答

        “Cache-Control、ETag 和 Last-Modified 等 HTTP 缓存机制通常由后端服务器或 CDN 配置,因为它们是 HTTP 头的一部分,前端无法直接修改服务器响应。但前端可以通过  头、Service Worker 和 LocalStorage 来优化缓存,比如拦截请求、缓存 API 数据或控制页面缓存策略。”

        “在实际项目中,我们通常让 CDN 或后端设置 Cache-Control: max-age=31536000, immutable 来缓存静态资源,同时用 ETag / Last-Modified 让浏览器避免重复下载已缓存的资源。此外,前端也可以使用 Service Worker 来缓存数据,提高离线访问能力。” 🚀

        这样回答能展示你的 缓存机制理解 + 实战经验,面试官会认可你的能力!💪

        最后:

        React Hook 深入浅出

        CSS技巧与案例详解

        vue2与vue3技巧合集

        VueUse源码解读

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码