代码之家  ›  专栏  ›  技术社区  ›  gaurav5430

ETag:弱与强的例子

  •  0
  • gaurav5430  · 技术社区  · 5 年前

    我一直在读关于etag的文章,我知道有两种方法可以生成etag,弱的和强的。弱etag比强etag在计算上更容易生成。我也逐渐知道,对于大多数用例来说,弱etag实际上已经足够了。

    MDN

    弱验证程序很容易生成,但对于 比较。强验证器是比较的理想选择,但是可以是 很难有效生成。

    另一个片段:

    相同资源的两个表示的弱etag值可能是 在语义上是等价的,但不是完全相同的。

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

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

    弱验证:两个资源表示在语义上 等效,例如,某些内容差异并不重要 从业务逻辑的角度来看,例如 页对于更新它的整个资源可能不重要。

    在生成etag时,您是否可以决定内容的更改对功能不重要(例如,字体大小的css属性更改)并用304响应?如果是,那么浏览器上的资源何时更新,我猜只要etag相同,浏览器就不会得到最新版本。在这种情况下,这可能意味着当发生重大更改并创建新的etag时,css属性更改将仅与重大更改一起发送到浏览器。

    0 回复  |  直到 5 年前
        1
  •  1
  •   Kevin Christopher Henry    5 年前

    我的建议是看看说明书, RFC 7232, section 2.1 . 它只有几页长,可能会回答你所有的问题。

    您需要的示例如下:

    • 例如,天气报告的表示形式 基于动态测量,每秒的内容可能被分组 在一组等价的表示中(从源服务器的 使用相同的弱验证程序,以便允许缓存 陈述在合理期限内有效。

    • 表示的修改时间(如果仅用 一秒钟的解决方案,如果可能的话,可能是一个弱验证程序 在一秒钟内对表示进行两次修改 在这些修改之间检索。

    • 如果源服务器为 一个gzip内容编码,就像它对一个没有 内容编码,那么验证程序是弱的。

    最后一个代表了弱etag最常见的用法:服务器在gzip内容时将强etag转换为弱etag。 Nginx does this ,例如。

    规范还解释了何时更改弱ETag:

    源服务器应在考虑之前的任何时候更改弱实体标记 不可接受的陈述 代表。

    换句话说,资源的两个表示是否是可接受的替换取决于您。如果是的话,可以通过给它们同样弱的etag来提高缓存性能。