HTTP缓存相关知识介绍
1、概述
HTTP協(xié)議的緩存是通過6個(gè)報(bào)文頭完成的,通過兩層協(xié)商使web資源能夠不那么頻繁地在服務(wù)器與客戶端之間傳遞,從而節(jié)約了流量,提高瀏覽速度。以從客戶端到服務(wù)器的順序,第一層協(xié)商為Cache-Control與Expires;第二層協(xié)商為L(zhǎng)ast-Modified與Etag。
2、相關(guān)的報(bào)文頭
2.1 Cache-Control
請(qǐng)求/響應(yīng)報(bào)文頭,緩存控制字段,也就是用于給資源生命期,是http/1.1引入的屬性。Cache-Control的取值可細(xì)分為兩類,一類是對(duì)緩存有直接決定性的值,他們會(huì)導(dǎo)致后續(xù)的第二層協(xié)商被跳過,包括:no-store、public、private;另一類是類似Expires的值,只是規(guī)定了有效期,后續(xù)的第二層協(xié)商不受影響,包括no-cache、max-age=x、s-maxage=x。
Cache-Control的取值如下:
形如:
Cache-Control:max-age=02.2 Expires
響應(yīng)報(bào)文頭,代表資源過期時(shí)間,由服務(wù)器返回提供,是http1.0的屬性,在與Cache-Control共存的情況下,優(yōu)先級(jí)要低。Expires的功能基本與Cache-Control的max-age相似,但它是指定一個(gè)過期時(shí)間點(diǎn),而Cache-Control的max-age是指定了過期前的秒數(shù)。
形如:
Expires:Fri,?10?Apr?2020?16:30:04?GMT2.3 Last-Modified
響應(yīng)報(bào)文頭,資源最新修改時(shí)間,由服務(wù)器告訴瀏覽器。
形如:
Last-Modified:Mon,?23?Mar?2020?18:39:50?GMT2.4 If-Modified-Since
請(qǐng)求報(bào)文頭,與Last-Modified相對(duì)應(yīng),瀏覽器把服務(wù)器最后一次給的Last-Modified返回,服務(wù)器將以此進(jìn)行對(duì)比,判斷資源是否需要更新。
形如:
If-Modified-Since:Fri,?10?Apr?2020?14:45:24?GMT2.5 Etag
響應(yīng)報(bào)文頭,資源內(nèi)容唯一標(biāo)識(shí),由服務(wù)器告訴瀏覽器。
形如:
Etag:58b66ccbe349d0d931df877c00d8101d037243dc2.6 If-None-Match
請(qǐng)求報(bào)文頭,與Etag相對(duì)應(yīng),瀏覽器把服務(wù)器最后一次給的Etag返回,服務(wù)器將以此進(jìn)行對(duì)比,判斷資源是否需要更新。
形如:
If-None-Match:58b66ccbe349d0d931df877c00d8101d037243dc3、 協(xié)商流程
以下假定資源已經(jīng)獲取過一次,并且運(yùn)行在HTTP/1.1環(huán)境下,現(xiàn)在進(jìn)行二次訪問。
流程圖如下:
說明:
客戶端是有可能因?yàn)榫彺嬖虿幌蚍?wù)器發(fā)起任何請(qǐng)求的,圖中200狀態(tài)(from cache)就是這種情況。
服務(wù)器根據(jù)回傳的If-Modified-Since與Last-Modified比對(duì),如果不同則說明這個(gè)文件修改過,需要更新。但在這種判斷精度是秒,如果是一秒內(nèi)的改動(dòng),就需要進(jìn)一步對(duì)比回傳的If-None-Match與ETag的值。
服務(wù)器返回304的意思就是不需要重新獲取新資源,直接使用本地緩存即可。
4、緩存多久合適
生存時(shí)間(TTL)指令告訴瀏覽器應(yīng)該緩存某個(gè)資源多久,即Cache-Control或Expires的值。找到給定資源的最佳TTL值并沒有完美的科學(xué)方法,只能憑經(jīng)驗(yàn)給出一些指導(dǎo)原則。
指導(dǎo)原則:
純靜態(tài)內(nèi)容,例如圖片或帶版本的數(shù)據(jù),可以在客戶端永久緩存;
CSS/JS和個(gè)性化資源,緩存時(shí)間大約是會(huì)話(交互)平均時(shí)間的兩倍;
其他類型資源取決于新數(shù)據(jù)對(duì)舊數(shù)據(jù)的容忍極限。
5、瀏覽器操作對(duì)HTTP緩存的影響
6、緩存改進(jìn)方案
md5/hash緩存:通過不緩存html,為靜態(tài)文件添加MD5或者h(yuǎn)ash標(biāo)識(shí),解決瀏覽器無法跳過緩存過期時(shí)間主動(dòng)感知文件變化的問題。
CDN緩存:CDN是構(gòu)建在網(wǎng)絡(luò)之上的內(nèi)容分發(fā)網(wǎng)絡(luò),依靠部署在各地的邊緣服務(wù)器,通過中心平臺(tái)的負(fù)載均衡、內(nèi)容分發(fā)、調(diào)度等功能模塊,使用戶就近獲取所需內(nèi)容,降低網(wǎng)絡(luò)擁塞,提高用戶訪問響應(yīng)速度和命中率。
IT技術(shù)分享社區(qū)
個(gè)人博客網(wǎng)站:https://programmerblog.xyz
文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠(yuǎn)程辦公:常用的遠(yuǎn)程協(xié)助軟件,你都知道嗎?51單片機(jī)程序下載、ISP及串口基礎(chǔ)知識(shí)硬件:斷路器、接觸器、繼電器基礎(chǔ)知識(shí)
總結(jié)
以上是生活随笔為你收集整理的HTTP缓存相关知识介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: WinRAR和WinZIP 密码找回
- 下一篇: python中if有几种使用方式_pyt