更新 HTTP ETag

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?

1个回答

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接