cache control 響應頭
1:private : 客戶端可以緩存
2:public: 客戶端和代理服務器都可以緩存
3:max-age=xxx :緩存的內容將在xxx秒后失效
4:no-cache:強制向服務端再驗證一次
有效性判斷
ETag:資源唯一標識
If-None-Match:客戶端發(fā)送的匹配Etag標識符
Last-modified:資源最后被修改的時間
if-Modified-Since:客戶端發(fā)送的匹配資源最后修改時間的標識符
瀏覽器的三種刷新方式
1:回車刷新或者a鏈接:看cache-control 對應的max-age是否仍然有效议双,有效則直接from cache,若cache-control中為no-cache,則進入緩存協(xié)商邏輯
2:F5刷新或者command+R刷新:去掉cache-control 中的max-age或直接設置max-age為0雀鹃,然后進入緩存協(xié)商邏輯拣帽。
協(xié)商機制烫葬,比較Last-modified和ETag到服務端荷辕,若服務端判斷沒有變化則304不返回數(shù)據(jù)昧甘,否則200返回數(shù)據(jù)
【技術心得】Last-Modified,Etag,Expire 區(qū)別
Last-Modified 是什么
Last-Modified 是 HttpHeader 中的資源的最后修改時間命黔,如果帶有 Last-Modified 呜呐,下一次發(fā)送 Http 請求時,將會發(fā)生帶 If-modified-since 的 HttpHeader 悍募。如果沒有過期蘑辑,將會收到 304 的響應,從緩存中讀取坠宴。
Etag 是什么
Etag 是 HttpHeader 中代表資源的標簽洋魂,在服務器端生成。如果帶有 Etag 喜鼓,下一次發(fā)送帶 Etag 的請求副砍,如果 Etag 沒有變化將收到 304 的響應,從緩存中讀取庄岖。
Etag 在使用時要注意相同資源多臺 Web 服務器的 Etag 的一致性豁翎。
Expire 是什么
Expire 是 HttpHeader 中代表資源的過期時間,由服務器段設置隅忿。如果帶有 Expire 心剥,則在 Expire 過期前不會發(fā)生 Http 請求,直接從緩存中讀取硼控。用戶強制 F5 例外刘陶。
Last-Modified,Etag,Expire 混合
通常 Last-Modified,Etag,Expire 是一起混合使用的,特別是 Last-Modified 和 Expire 經常一起使用牢撼,因為 Expire 可以讓瀏覽器完全不發(fā)起 Http 請求匙隔,而當瀏覽器強制 F5 的時候又有 Last-Modified ,這樣就很好的達到了瀏覽器段緩存的效果熏版。
Etag 和 Expire 一起使用時纷责,先判斷 Expire ,如果已經過期撼短,再發(fā)起 Http 請求再膳,如果 Etag 也過期,則返回 200 響應曲横。如果 Etag 沒有過期則返回 304 響應喂柒。
Last-Modified,Etag,Expires 三個同時使用時不瓶。先判斷 Expire ,然后發(fā)送 Http 請求灾杰,服務器先判斷 last-modified 蚊丐,再判斷 Etag ,必須都沒有過期艳吠,才能返回 304 響應麦备。