一文詳解Nginx的強(qiáng)緩存和協(xié)商緩存
一、強(qiáng)緩存(Strong Cache)
1. 定義
強(qiáng)緩存直接告訴瀏覽器:在緩存過(guò)期前,無(wú)需與服務(wù)器通信,直接使用本地緩存。
由服務(wù)器通過(guò)響應(yīng)頭 Cache-Control 和 Expires 控制。
2. 響應(yīng)頭
Cache-Control: max-age=3600表示資源在 3600 秒(1小時(shí)) 內(nèi)有效(優(yōu)先級(jí)高于 Expires)。
Expires: Thu, 31 Dec 2030 23:59:59 GMT指定一個(gè)絕對(duì)過(guò)期時(shí)間(依賴于客戶端本地時(shí)間,可能存在誤差)。
3. Nginx 配置示例
location /static/ {
# 設(shè)置強(qiáng)緩存:1年內(nèi)有效
add_header Cache-Control "public, max-age=31536000";
expires 1y;
}
4. 行為
瀏覽器首次請(qǐng)求資源時(shí),服務(wù)器返回資源并附帶緩存頭。
后續(xù)請(qǐng)求時(shí),瀏覽器直接讀取本地緩存(狀態(tài)碼 200 (from disk cache)),不發(fā)送請(qǐng)求到服務(wù)器。
5. 適用場(chǎng)景
靜態(tài)資源(如 CSS、JS、圖片、字體文件)等長(zhǎng)期不變的資源。
二、協(xié)商緩存(協(xié)商緩存,Weak Cache)
1. 定義
協(xié)商緩存要求瀏覽器 每次向服務(wù)器驗(yàn)證緩存是否過(guò)期,若未過(guò)期則返回 304 Not Modified,繼續(xù)使用本地緩存。
由服務(wù)器通過(guò)響應(yīng)頭 Last-Modified 和 ETag 控制。
2. 響應(yīng)頭
Last-Modified: Wed, 21 Oct 2023 07:28:00 GMT表示資源最后修改時(shí)間(精度為秒,可能因時(shí)間同步問(wèn)題失效)。
ETag: "5d8c72a5-264"資源的唯一標(biāo)識(shí)符(哈希值或版本號(hào)),精度更高。
3. Nginx 配置示例
location /dynamic/ {
# 啟用協(xié)商緩存(默認(rèn)已支持,無(wú)需顯式配置)
add_header Last-Modified "";
etag on;
}
4. 行為
瀏覽器首次請(qǐng)求資源時(shí),服務(wù)器返回資源并附帶 Last-Modified 或 ETag。
后續(xù)請(qǐng)求時(shí),瀏覽器通過(guò)以下請(qǐng)求頭驗(yàn)證緩存:
If-Modified-Since: [Last-Modified值]向服務(wù)器詢問(wèn)資源是否在指定時(shí)間后修改過(guò)。If-None-Match: [ETag值]向服務(wù)器驗(yàn)證資源的ETag是否變化。
若資源未修改,服務(wù)器返回 304 Not Modified,瀏覽器繼續(xù)使用緩存;若已修改,返回新資源(狀態(tài)碼 200)。
5. 適用場(chǎng)景
頻繁更新的資源(如 HTML 頁(yè)面、動(dòng)態(tài) API 響應(yīng))。
三、關(guān)鍵區(qū)別
| 特性 | 強(qiáng)緩存 | 協(xié)商緩存 |
|---|---|---|
| 通信成本 | 無(wú)網(wǎng)絡(luò)請(qǐng)求(直接讀緩存) | 需發(fā)送請(qǐng)求驗(yàn)證緩存 |
| 響應(yīng)狀態(tài)碼 | 200 (from disk cache) | 304 Not Modified |
| 優(yōu)先級(jí) | 優(yōu)先于協(xié)商緩存 | 強(qiáng)緩存過(guò)期后觸發(fā) |
| 適用資源 | 長(zhǎng)期不變的靜態(tài)資源 | 頻繁更新的動(dòng)態(tài)資源 |
四、Nginx 最佳實(shí)踐
1.混合使用兩種緩存
location / {
# 強(qiáng)緩存 1 小時(shí),過(guò)期后啟用協(xié)商緩存
add_header Cache-Control "public, max-age=3600";
etag on;
}
2.按文件類型區(qū)分策略
# 圖片、字體等強(qiáng)緩存
location ~* \.(jpg|png|gif|woff2)$ {
expires 1y;
add_header Cache-Control "public, max-age=31536000";
}
# HTML 文件禁用強(qiáng)緩存(總是協(xié)商)
location ~* \.html$ {
add_header Cache-Control "no-cache, must-revalidate";
}
3.解決緩存更新問(wèn)題
強(qiáng)緩存資源建議通過(guò) 文件名哈希 控制版本(如 main.abcd1234.js)。
協(xié)商緩存可通過(guò)修改 ETag 或 Last-Modified 觸發(fā)更新。
五、調(diào)試工具
瀏覽器開發(fā)者工具(Network 標(biāo)簽):
- 查看
200 (from disk cache)(強(qiáng)緩存)或304 Not Modified(協(xié)商緩存)。 - 檢查請(qǐng)求頭中的
Cache-Control、If-Modified-Since、If-None-Match。
命令行工具:
curl -I http://example.com/resource.js
通過(guò)合理配置強(qiáng)緩存和協(xié)商緩存,可以顯著提升網(wǎng)站性能,減少服務(wù)器負(fù)載。
到此這篇關(guān)于一文詳解Nginx的強(qiáng)緩存和協(xié)商緩存的文章就介紹到這了,更多相關(guān)Nginx緩存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nginx路由匹配規(guī)則及優(yōu)先級(jí)詳解
Nginx作為一個(gè)高性能的Web服務(wù)器和反向代理服務(wù)器,廣泛用于負(fù)載均衡、請(qǐng)求轉(zhuǎn)發(fā)等場(chǎng)景,在配置Nginx時(shí),路由匹配規(guī)則是非常重要的概念,本文將詳細(xì)介紹Nginx的路由匹配規(guī)則及其優(yōu)先級(jí),需要的朋友可以參考下2025-05-05
使用nginx搭建點(diǎn)播和直播流媒體服務(wù)器的方法步驟
本篇文章主要介紹了使用nginx搭建點(diǎn)播和直播流媒體服務(wù)器的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
Nginx在Windows下的安裝及環(huán)境配置(將nginx作為服務(wù)運(yùn)行)
這篇文章主要介紹了Nginx在Windows下的安裝及環(huán)境配置,主要是將nginx作為服務(wù)運(yùn)行,需要的朋友可以參考下2018-11-11
Nginx配置多臺(tái)機(jī)器實(shí)現(xiàn)負(fù)載均衡的教程詳解
這篇文章主要為大家詳細(xì)介紹了Nginx配置多臺(tái)機(jī)器實(shí)現(xiàn)負(fù)載均衡的相關(guān)教程,文中的示例代碼簡(jiǎn)潔易懂,有需要的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
keepalived監(jiān)控nginx進(jìn)程的實(shí)現(xiàn)示例
本文主要介紹了keepalived監(jiān)控nginx進(jìn)程的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-08-08
Nginx動(dòng)態(tài)壓縮gzip的實(shí)現(xiàn)示例
有時(shí)候適當(dāng)?shù)膲嚎s傳輸?shù)奈募?huì)對(duì)APP或網(wǎng)站的性能有極大的提升,本文主要介紹了Nginx動(dòng)態(tài)壓縮gzip的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-08-08
nginx-ingress-controller日志持久化方案的解決
這篇文章主要介紹了nginx-ingress-controller日志持久化方案的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03
Nginx服務(wù)器進(jìn)程數(shù)設(shè)置和利用多核CPU的方法
這篇文章主要介紹了Nginx服務(wù)器進(jìn)程數(shù)設(shè)置和利用多核CPU的方法,這樣便可以更大限度地提高Nginx運(yùn)行效率,需要的朋友可以參考下2015-08-08

