Etag:弱与强的榜样

时间:2019-06-19 08:25:27

标签: web caching browser-cache etag

我一直在阅读有关Etags的文章,并且我了解生成Etag的方法有2种,即弱者和强者。弱Etag在计算上比强Etag更容易生成。我还知道,弱Etags对于大多数用例而言已经足够了。

来自MDN

  

弱验证器易于生成,但远没有那么有用   比较。强大的验证器是比较的理想选择,但可以   很难高效生成。

另一个摘要:

  

相同资源的两种表示形式的Etag值可能是   在语义上是等效的,但不是逐字节相同的。

我发现很难理解资源在语义上相似而不是逐字节相同意味着什么?很高兴看到一些例子。

编辑:找到一个示例here,但我不明白:

  

弱验证:这两种资源表示形式在语义上   等价的一些内容差异并不重要   从业务逻辑的角度来看当前日期显示在   页面对于更新整个资源可能并不重要。

就像生成Etag一样,您可以确定内容的更改对于该功能并不重要(例如,对于字体大小的c​​ss属性更改),然后响应304?如果是,那么何时在浏览器上更新资源,我想只要Etag相同,浏览器就不会获得最新版本。在这种情况下,这可能意味着当发生重大更改并创建了新的Etag时,css属性更改才与主要更改一起发送到浏览器。

1 个答案:

答案 0 :(得分:1)

我的建议是查看规范RFC 7232, section 2.1。它只有几页长,可以回答您所有的问题。

您要求提供示例,以下是规范中的一些示例:

  •   

    例如,天气报告的表示形式在   根据动态测量结果,每秒可以对内容进行分组   分为等效表示的集合(来自原始服务器的   透视图)具有相同的弱验证器,以便允许缓存   陈述在一段合理的时间内有效。

  •   

    表示的修改时间(如果仅用定义)   一秒钟的分辨率,如果可能的话,可能是一个弱验证者   在一秒钟内两次修改表示形式   并在这些修改之间进行检索。

  •   

    如果原始服务器发送相同的验证器来表示   应用gzip内容编码,就像对没有   内容编码,那么该验证器就很弱。

最后一个代表弱ETag可能是最常见的用法:服务器在对内容进行gzip压缩时将强ETag转换为弱ETag。例如Nginx does this

该规范还说明了何时更改弱ETag:

  

只要原始服务器考虑优先,它就应该更改一个弱实体标签      不能替代现行的陈述      表示形式。

换句话说,由您决定资源的两种表示形式是否可以接受。如果是这样,可以通过为它们提供相同的弱ETag来提高缓存性能。