【问题标题】:What is the best way to generate a ETag based on the timestamp of the resource根据资源的时间戳生成 ETag 的最佳方法是什么
【发布时间】:2023-04-04 19:55:01
【问题描述】:

所以在我的一个项目中,我必须创建一个 http 缓存来处理对服务器的多个 API 调用。我读到了这个 ETag 标头,它可以与条件 GET 一起使用以最小化服务器负载并执行缓存。但是我在生成 E-Tag 时遇到了问题。我可以使用资源的 LAST_UPDATED_TIMESTAMP 作为 ETag 或散列它使用某种散列算法,如 MD5。但是最好的方法是什么? 使用原始时间戳作为 Etag 有什么缺点吗?

任何支持性的答案都非常感谢..提前谢谢....干杯!!

【问题讨论】:

    标签: performance api http caching etag


    【解决方案1】:

    如果你的时间戳有足够的精度,你可以保证它会在资源发生变化时发生变化,那么你可以使用时间戳的编码(标头值需要是 ascii)。

    但请记住,ETag 可能不会为您节省太多。它只是一个缓存重新验证标头,因此您仍然会从客户端获得尽可能多的请求,只是有些是有条件的,如果 ETag 没有更改,您可能会避免发回有效负载,但您仍然会招致一些工作弄清楚这一点(可能会少一些工作,所以值得)。

    事实上,几个版本的 IIS 使用文件时间戳来生成 Etag。我们在构建 WinGate 的缓存模块时遇到了这个问题,当一大堆具有相同时间图的文件以相同的 Etag 结束时,我们了解到 Etag 仅在请求 URI 的上下文中有效。

    【讨论】:

    • 您能否进一步解释 Etag 在 URI 上下文中有效?你是怎么遇到碰撞的?每个文件不应该有不同的 URI 吗?
    • 2 个不同的 URI 可以具有相同的 ETag 值。显然它们是不同的资源。例如,您不能键入 ETag。早期版本的 IIS 使用文件修改日期来生成 ETag,因此,如果您将一堆文件复制到一个文件夹中,并且它们具有相同的日期,那么它们可能(并且我已经看到)以相同的 ETag 结束由 IIS 发出。
    • 好吧,我想你是说 ETags 对于域上的所有资源都应该是唯一的,因为浏览器没有考虑 URI/URL?
    • 不,我不是这么说的。
    猜你喜欢
    • 2011-04-22
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 2020-11-13
    • 1970-01-01
    • 2016-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多