Last-Modifield
當(dāng)我們第一次請求一個(gè)url時(shí)偎箫,服務(wù)端會(huì)返回狀態(tài)碼為200怠蹂,并且返回一個(gè) Last-Modifield 的屬性進(jìn)行標(biāo)記此文件最后的修改時(shí)間,格式如下:
Last-Modified: Fri, 12 May 2006 18:53:33 GMT
當(dāng)?shù)诙握埱髸r(shí),客戶端會(huì)向服務(wù)端發(fā)送一個(gè) If-Modifield-Since報(bào)頭(這是上一次從服務(wù)端請求得到的),查看此文件是否修改過:
Last-Modified: Fri, 12 May 2006 18:53:33 GMT
若此資源沒有變化幔妨,則返回一個(gè)304的狀態(tài)碼,內(nèi)容為空谍椅。否則误堡,若代碼變化或者服務(wù)器重啟,則返回一個(gè)200的狀態(tài)碼雏吭,并重新獲得此資源
Etag
HTTP協(xié)議規(guī)定它為 “被修改變量的實(shí)體值”锁施,它也有其他叫法,web資源的記號或標(biāo)示思恐。服務(wù)端能判斷客戶請求的資源是什么沾谜,把記號放在http的響應(yīng)頭中返回給客戶端,如下
ETag: "50b1c1d4f775c61:df3"
客戶端能查詢更新格式胀莹,如下
If-None-Match: W/"50b1c1d4f775c61:df3"
不同的服務(wù)端可能生成的方式不一樣基跑,如nginx則是把文件的最后修改時(shí)間,和文件大小字節(jié)的16進(jìn)制拼接起來的
Etag作用與Last-modifield類似描焰,若資源無變化媳否,則返回304狀態(tài)碼
那么問題來了,已經(jīng)有了Etag荆秦,為什么還需要Last-Modifield呢篱竭?
Etag比較的是文件資源的特征值,而Last-Modifield則比較的是文件資源的最后的修改時(shí)間步绸。這兩個(gè)其實(shí)是相輔相成的掺逼,不是有了Etag就不該有Last-Modifield,有了Last-Modifield就不該有Etag瓤介,同時(shí)傳入服務(wù)器時(shí)吕喘,服務(wù)器會(huì)根據(jù)自己的緩存機(jī)制進(jìn)行選擇要使用哪個(gè),甚至可以兩個(gè)都進(jìn)行參考刑桑。
有什么作用呢氯质?
正是因?yàn)樗軌蚺袛嗍欠裰匦抡埱筚Y源文件,這樣最好的結(jié)果就是祠斧,能夠節(jié)省一定的帶寬和流量闻察,特別是大數(shù)據(jù)的時(shí)候,雖然這小小的變化琢锋,但卻能起到一個(gè)非常好的效果辕漂。
以上就是我對Etag和Last-Modifield的理解,如有錯(cuò)誤吩蔑,還望指正钮热。