2012-08-03 67 views
3

我正在使用WebDav將元數據放在服務器的文件和文件夾上,以及緩存以避免對服務器的不必要的請求,這取決於文件的ETag屬性。更新HTTP ETag

基本上,我發送一個HEAD請求,並檢查ETag是否與我在本地的相匹配。如果沒有,那麼我發送一個更大,更慢的PROPFIND方法來檢索其他屬性。

我構建這個緩存​​的想法是,每次修改文件時都會更改ETag,包括修改,添加或刪除元數據時。

不過,我最近發現,情況並非如此:

因爲客戶可能會被迫提示用戶或扔掉改變 的內容,如果ETag的變化,WebDAV服務器應該不會改變 ETag(或最後修改時間)對於具有未更改的主體和位置的資源。 ETag代表資源內容的狀態或 。 沒有類似的方法可以判斷 屬性是否已更改

(RFC 4918,http://www.webdav.org/specs/rfc4918.html#etag,重點煤礦)

因爲每當性質改變無效的緩存是對我很重要,我想知道:有沒有辦法手動指示web服務器更新的ETag ?

回答

2

有幾個不同的選項。如果etag是基於內容生成的(一個壞主意),那麼它就更加困難。在我們的解決方案中,我們生成了一個不同的標籤(ptag),當屬性發生變化時我們會更新它,並且您可以用PROPFIND查詢它,然後我們將其作爲X-PTag標題在響應中返回。如果etag是在PUT上隨機生成的,那麼您可以再次輸入相同的數據,這會給您一個新的etag。