HTTP缓存详解之etag
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
-----------------
Apache 1.3和2.x中的ETag格式為inode-size-timestamp。即使某個文件在不同的服務(wù)器上都處于相同的目錄下,文件大小、權(quán)限、時間戳等都完全相同,但是在不同服務(wù)器上他們的內(nèi)碼也是不同的。
IIS 5.0和IIS 6.0處理ETag的機(jī)制相似。IIS中的ETag格式為Filetimestamp:ChangeNumber。用ChangeNumber來跟蹤 IIS配置的改變。網(wǎng)站所用的不同IIS服務(wù)器間ChangeNumber也不相同。不同的服務(wù)器上的Apache和IIS即使對于完全相同的內(nèi)容產(chǎn)生的ETag在也不相同,用戶并不會接收到一個小而快的304響應(yīng);相反他們會接收一個正常的200響應(yīng)并下載全部內(nèi)容。如果你的網(wǎng)站只放在一臺服務(wù)器上,就不會存在這個問題。但是如果你的網(wǎng)站是架設(shè)在多個服務(wù)器上,并且使用Apache和 IIS產(chǎn)生默認(rèn)的ETag配置,你的用戶獲得頁面就會相對慢一點(diǎn),服務(wù)器會傳輸更多的內(nèi)容,占用更多的帶寬,代理也不會有效地緩存你的網(wǎng)站內(nèi)容。即使你的 內(nèi)容擁有Expires文件頭,無論用戶什么時候點(diǎn)擊“刷新”或者“重載”按鈕都會發(fā)送相應(yīng)的GET請求。如果你沒有使用ETag提供的靈活的驗(yàn)證模式,那么干脆把所有的ETag都去掉會更好
----------------
Etag是什么:?http://www.javaeye.com/topic/656658?
Etag 是URL的Entity Tag,用于標(biāo)示URL對象是否改變,區(qū)分不同語言和Session等等。具體內(nèi)部含義是使服務(wù)器控制的,就像Cookie那樣。
HTTP協(xié)議規(guī)格說明定義ETag為“被請求變量的實(shí)體值”。另一種說法是,ETag是一個可以與Web資源關(guān)聯(lián)的記號(token)。典型的Web資源可以一個Web頁,但也可能是JSON或XML文檔。服務(wù)器單獨(dú)負(fù)責(zé)判斷記號是什么及其含義,并在HTTP響應(yīng)頭中將其傳送到客戶端。
實(shí)例詳解:
也許讀者們看完這個概念,還是搞不清楚這個etag響應(yīng)頭消息到底是干什么的,具體如何使用,所以接下來的篇幅我會用一個實(shí)際的例子來詳細(xì)闡述etag的妙用。
想必許多網(wǎng)友都有訂閱某些大蝦的RSS的習(xí)慣吧,但是大蝦們不可能無時無刻的從事文學(xué)創(chuàng)作,因此一般產(chǎn)量較高的大蝦也許 平均每天能更新兩篇已經(jīng)是不錯了,但是網(wǎng)友們卻總是不斷的去刷新RSS訂閱的內(nèi)容,期望在下次刷新中又有新的勁爆文章出現(xiàn),如果我們每次刷新,都要從服務(wù)器端重新獲取內(nèi)容(事實(shí)上,幾乎一天內(nèi)95%以上的刷新返回的都是相同內(nèi)容,因?yàn)閯偛乓舱f了,大蝦一般一天也就出一兩篇新文章而已,所以大部分時間內(nèi),內(nèi) 容都是相同的),如果訂閱量相當(dāng)巨大,這對于服務(wù)器的壓力還是帶寬都是一個嚴(yán)重的挑戰(zhàn)。
其實(shí)真正需要服務(wù)器重新返回內(nèi)容是大蝦們更新了新的文章后,而其他時間我們無論怎么刷新服務(wù)器最好能做到不需返回任何數(shù)據(jù),這才是一個比較好的方案,而我們的主角etag響應(yīng)頭的出現(xiàn)正是為了解決這個問題。
瀏覽器端實(shí)現(xiàn)
當(dāng)我們訂閱了某大蝦的RSS,如圖,我們點(diǎn)擊左下角“RSS”按鈕:
轉(zhuǎn)載于:https://my.oschina.net/ajian2014/blog/307345
總結(jié)
以上是生活随笔為你收集整理的HTTP缓存详解之etag的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 构造函数不能为虚函数
- 下一篇: 使用sublime text 开发nod