新聞中心
做web開發(fā)的同學(前端工程師和后端工程師),經(jīng)常遇到響應(yīng)304,304的意思就是瀏覽器已經(jīng)緩存,不需要走服務(wù)器,瀏覽器直接響應(yīng)數(shù)據(jù)給用戶,最常用的解決瀏覽器緩存的問題,就是在靜態(tài)文件后面添加版本號,讓瀏覽器不響應(yīng)緩存。那么web瀏覽器是怎么緩存數(shù)據(jù)的:

成都創(chuàng)新互聯(lián)公司主要業(yè)務(wù)有網(wǎng)站營銷策劃、成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、微信公眾號開發(fā)、微信小程序開發(fā)、H5開發(fā)、程序開發(fā)等業(yè)務(wù)。一次合作終身朋友,是我們奉行的宗旨;我們不僅僅把客戶當客戶,還把客戶視為我們的合作伙伴,在開展業(yè)務(wù)的過程中,公司還積累了豐富的行業(yè)經(jīng)驗、全網(wǎng)整合營銷推廣資源和合作伙伴關(guān)系資源,并逐漸建立起規(guī)范的客戶服務(wù)和保障體系。
Expires
早起的web就是通過這個字段來告訴瀏覽器該緩存多久,這種緩存的原理是根據(jù)當前服務(wù)器的時間加上緩存有效的時間,最終生成未來某個失效時間值,返回給瀏覽器,比如失效時間點為2020 ,那么當用戶刷新頁面的時候,就會先判斷當前時間是否到2020年,如果沒到,瀏覽器把緩存的數(shù)據(jù)直接返回給用戶,不走web服務(wù)器,這種緩存的一個缺點就是:如果用戶修改了自己的本地時間,那么緩存可能失效。
Cache-control
因為Expires的缺點,后來的cache-control就做了改進,cache-control不再存絕對時間,存的是相對時間,比如緩存是60秒,需要注意的是如果你設(shè)置了max-age=60,那么在這60秒內(nèi),即使服務(wù)端修改了,你也得不到新的數(shù)據(jù),所以這個使用要慎重,對應(yīng)的另一個還有叫no-cache的,no-cahe并不是不緩存,而是每次都要和服務(wù)器做比較,如果服務(wù)器未更新那么就讀取緩存,反之讀取新的,與no-cache對應(yīng)的就是no-store。no-store才是真的告訴瀏覽器不要讀取緩存的意思。
Last-Modified和If-Modified-Since
Last-Modified是服務(wù)器返回給瀏覽器的
If-Modified-Since是瀏覽器告訴服務(wù)器的
舉個例子,如果你訪問個url,肯定沒緩存走服務(wù)器,服務(wù)器返回個Last-Modified,即這個資源最近被修改的時間A,響應(yīng)的http狀態(tài)碼是200,同時瀏覽器把這個時間A存起來,下次請求的時候,瀏覽器會帶著這個If-Modified-Since去和服務(wù)器做對比,如果說,兩次的時間一樣,那么就是資源沒更新,瀏覽器直接返回自己緩存的資源,響應(yīng)的http狀態(tài)碼是304,如果說兩次時間不一樣,那么服務(wù)器再次返回Last-Modified時間和200的http狀態(tài)碼。但是這種策略也有缺點,就是時間最小單位是1s,如果說1秒內(nèi)發(fā)了好幾次更新,瀏覽器就不知道了。
Etag和If-no-match
由于Last-Modified不支持秒級的變化,后來出現(xiàn)了Etag,Etag是文件修改時間等hash的結(jié)果,不存具體時間值,這樣每次請求的時候,瀏覽器會帶上If-no-match和服務(wù)器的Etag做對比,如果一樣,走緩存,不一樣,走服務(wù)器,然后緩存起來,可以精確到秒級
分享文章:程序員需要了解的瀏覽器緩存技術(shù)
鏈接URL:http://m.fisionsoft.com.cn/article/dpspgdc.html


咨詢
建站咨詢
