成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:Cache-Control 等緩存機制一般是前端配置還是后端配置?

開發
在實際項目中,我們通常讓 CDN 或后端設置 Cache-Control: max-age=31536000, immutable 來緩存靜態資源,同時用 ETag / Last-Modified 讓瀏覽器避免重復下載已緩存的資源。

回答思路:

  • 靜態資源緩存(Cache-Control、ETag、Last-Modified) 通常是后端(或 CDN)配置的,因為 HTTP 頭部是由服務器返回的,前端無法直接修改服務器響應頭。
  • 前端可以通過 <meta> 標簽、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 頭部(限制頁面緩存)

前端可以用 <meta> 標簽來控制頁面緩存,例如:

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">
  • no-cache:瀏覽器必須向服務器驗證資源是否過期(但仍可用 ETag 和 Last-Modified)。
  • no-store:瀏覽器不會緩存該資源,每次都重新下載。
  • must-revalidate:如果緩存過期,必須重新請求。

(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 進行緩存:

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 配置

ETag

 / Last-Modified

?

? 服務器生成哈?;驎r間戳

meta

 標簽緩存控制

?

?

Service Worker

?

?

LocalStorage 緩存

?

?

5. 面試官最佳回答

Cache-Control、ETag 和 Last-Modified 等 HTTP 緩存機制通常由后端服務器或 CDN 配置,因為它們是 HTTP 頭的一部分,前端無法直接修改服務器響應。但前端可以通過 <meta> 頭、Service Worker 和 LocalStorage 來優化緩存,比如攔截請求、緩存 API 數據或控制頁面緩存策略。

在實際項目中,我們通常讓 CDN 或后端設置 Cache-Control: max-age=31536000, immutable 來緩存靜態資源,同時用 ETag / Last-Modified 讓瀏覽器避免重復下載已緩存的資源。此外,前端也可以使用 Service Worker 來緩存數據,提高離線訪問能力。

這樣回答能展示你的 緩存機制理解 + 實戰經驗,面試官會認可你的能力!

責任編輯:趙寧寧 來源: 大遷世界
相關推薦

2023-09-12 14:56:13

MyBatis緩存機制

2025-03-10 07:05:07

2010-09-26 08:46:06

HTML 5Cache Manif

2023-11-15 09:14:27

Java值傳遞

2024-02-20 14:10:55

系統緩存冗余

2023-09-01 15:27:31

2024-01-19 14:03:59

Redis緩存系統Spring

2021-08-16 18:52:09

同步異步React

2021-09-07 10:44:33

Java 注解開發

2024-03-12 10:44:42

2024-10-24 09:22:30

2020-09-14 06:57:30

緩存穿透雪崩

2022-01-26 00:01:00

Casbin配置權限

2019-06-05 15:23:09

Redis緩存存儲

2025-03-05 08:04:31

2023-12-06 13:38:00

Redis緩存穿透緩存擊穿

2023-02-18 13:34:14

Nacos健康檢查機制

2021-01-06 17:28:00

MySQL數據庫緩存池

2024-02-22 15:36:23

Java內存模型線程

2021-12-08 06:53:29

面試動態代理
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩综合一区 | 欧美精品综合 | 亚洲不卡在线观看 | 久久久123 | 欧美色综合网 | 国产一区二区小视频 | 午夜精品久久久久久久久久久久久 | 男女午夜免费视频 | 黑人精品欧美一区二区蜜桃 | 精区3d动漫一品二品精区 | 农村黄性色生活片 | 日韩在线视频一区二区三区 | 久久青视频| 日韩亚洲视频在线 | 欧美福利三区 | 国产成人小视频 | 九九热精品在线 | 亚洲 精品 综合 精品 自拍 | 婷婷毛片| 日韩中文字幕久久 | 久草热在线 | 午夜精品久久久久99蜜 | 五月天国产视频 | 黄色网址在线免费播放 | 久久福利电影 | 精品国产乱码久久久久久丨区2区 | 亚洲国产一区在线 | 精品久久免费 | 中文字幕国产视频 | 亚洲视频一区在线观看 | 中文字幕亚洲区一区二 | 国产一级一级毛片 | 亚洲精品永久免费 | 欧美性受xxx| 久久一区二区精品 | 神马影院一区二区三区 | 久久蜜桃av一区二区天堂 | av一区二区三区 | 91精品国产欧美一区二区成人 | 欧美一区二区三区的 | 亚洲日本免费 |