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