gpt4 book ai didi

http - If-Unmodified-Since/If-Modified-Since 有什么意义?它们不是被 ETag 取代了吗?

转载 作者:可可西里 更新时间:2023-11-01 15:09:19 26 4
gpt4 key购买 nike

似乎有两种截然不同的方法可以使用 HTTP header 来实现条件请求,这两种方法都可以用于缓存、范围请求、并发控制等......:

  1. If-Unmodified-Since 和 If-Modified-Since,其中客户端发送资源的时间戳
  2. If-Modified 和 If-None-Modified,其中客户端发送资源的 ETag 表示。

在这两种情况下,客户端都会发送一条它拥有的关于资源的信息,这允许服务器确定自客户端上次看到资源以来资源是否发生了变化。服务器然后根据客户端提供的条件 header 决定是否执行请求。

我不明白为什么有两种不同的方法可用。当然,ETag 会取代时间戳,因为服务器可以很容易地选择从时间戳生成 ETag。

所以,我的问题是:

  • 在哪些情况下您更喜欢 If-Unmodified-Since/If-Modified-Since 而不是 ETag?
  • 在哪些情况下您可能需要两者?

最佳答案

我曾经思考过同样的事情,并意识到有一个非常重要的区别:日期可以排序,而 ETag 不能。

这意味着如果某些资源在一年前被修改过,但从那以后就没有修改过,而且我们知道这一点。然后我们可以正确地回答去年任意日期的 If-Unmodified-Since 请求,并同意确定......自该日期以来一直未修改。

Etag 仅在身份上具有可比性。要么相同,要么不同。如果您拥有与上述相同的资源,并且在这一年中,docroot 已移动到新的磁盘和文件系统,为所有文件提供新的 inode,但保留修改日期。并且有人将 ETag 基于文件的 inode 编号。那么我们不能说旧的 ETag 仍然可以,如果没有过去仍然可以的 ETag 的日志。

所以我不认为它们会相互淘汰。它们适用于不同的情况。您可以轻松获得您将要提供服务的页面中所有数据的最后修改日期,或者您可以轻松获得您将提供的内容的 ETag。

如果您有一个包含大量数据库查找数据的动态网页,如果不让您的数据库包含大量修改日期,则可能很难判断最后修改日期是什么。但您始终可以对结果呈现页面进行 md5 校验和。

在支持这些缓存协议(protocol)时,我肯定只选择其中一种,绝不会同时选择两种。

关于http - If-Unmodified-Since/If-Modified-Since 有什么意义?它们不是被 ETag 取代了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2126807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com