3

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

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

我基于每次修改文件时都会更改 ETag 的想法构建此缓存,包括修改、添加或删除元数据时。

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

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

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

由于每当属性更改时使缓存失效对我来说很重要,我想知道:有没有办法手动指示 Web 服务器更新 ETag ?

4

1 回答 1

2

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

于 2012-09-05T17:31:16.763 回答