续订HTTP ETag

时间:2012-08-03 10:07:09

标签: http caching webdav http-etag

我正在使用WebDav将元数据放在服务器的文件和文件夹上,以及缓存,以避免根据文件的ETag属性向服务器发出不必要的请求。

基本上,我发送一个HEAD请求并检查ETag是否与我在本地的那个匹配。如果没有,那么我发送一个更大,更慢的PROPFIND方法来检索其他属性。

我根据每次修改文件时更改ETag的想法构建了此缓存,包括修改,添加或删除元数据的时间。

但是,我最近发现事实并非如此:

  

因为客户可能被迫提示用户或丢弃更改   内容如果ETag改变,WebDAV服务器不应该改变   具有未更改的资源的ETag(或Last-Modified时间)   身体和位置。 ETag代表身体的状态或   资源的内容。 没有类似的方法可以判断   属性已更改

(RFC 4918,http://www.webdav.org/specs/rfc4918.html#etag,强调我的)

因为每当属性发生变化时使缓存无效对我来说很重要,我想知道:有没有办法手动指示Web服务器更新ETag?

1 个答案:

答案 0 :(得分:2)

有两种不同的选择。如果etag是根据内容生成的(一个坏主意),那就更难了。在我们的解决方案中,我们生成了一个不同的标记(ptag),我们在属性更改时更新了,您可以使用PROPFIND查询它,然后我们将其作为响应的X-PTag标头返回。如果在PUT上随机生成etag,那么你可以再次输出相同的数据,它会给你一个新的etag。