2016-08-18 56 views
1

因此,在我的一個項目中,我必須創建一個http緩存來處理到服務器的多個API調用。我讀了關於這個ETag頭,可以與條件GET一起使用,以最大限度地減少服務器負載並實現緩存。但是,我生成E-Tag時遇到問題。我可以使用資源的LAST_UPDATED_TIMESTAMP作爲ETag或散列它使用某種像MD5的散列算法。但是最好的辦法是什麼? 有沒有使用原始時間戳作爲Etag?什麼是根據資源時間戳生成ETag的最佳方式

任何支持的答案是高度讚賞..在此先感謝....乾杯!

回答

1

如果您的時間戳具有足夠的精度以便您可以保證隨時更改資源,那麼您可以使用時間戳的編碼(標頭值需要ascii)。

但請記住,ETag可能無法爲您節省很多。它只是一個緩存重新驗證頭,所以你仍然可以從客戶端獲得儘可能多的請求,只有一些是有條件的,並且如果ETag沒有改變,你可以避免發送有效載荷,但是你仍然會產生一些工作搞清楚(可能是一堆工作少,所以可能是值得的)。

事實上,幾個版本的IIS使用文件時間戳來生成Etag。在構建WinGate的緩存模塊時,我們絆倒了這一點,當一堆具有相同時間戳的文件以相同的Etag結尾時,我們瞭解到Etag僅在請求URI的上下文中有效。

+0

你能否進一步解釋Etag在URI的上下文中是否有效?你是怎麼碰到的?不應該每個文件都有不同的URI? – otterslide

+0

2個不同的URI可以具有相同的ETag值。顯然他們是不同的資源。例如,你不能在ETag上鍵入密碼。早期版本的IIS使用文件修改日期來生成ETag,所以如果您將一堆文件複製到一個文件夾中,並且他們獲得了相同的日期,那麼他們可以(並且我已經看到它)以相同的ETag結束由IIS發出。 – Adrien

+0

好吧,我想你說ETags對域中的所有資源都應該是唯一的,因爲瀏覽器不會考慮URI/URL? – otterslide

相關問題