可能是什么之间的差异如果改性-因为如果没有-比赛?我有一种感觉,如果没有匹配的是用于文件而如果改性-由于使用的页面?

有帮助吗?

解决方案

关于之间的差异 Last-Modified/If-Modified-SinceETag/If-None-Match:

两者可以互换使用。然而,根据资源的类型以及它在服务器上生成的方式,一个或另一个问题(“自...以来是否已修改?”/“这仍然与此 ETag 匹配吗?”)可能更容易回答。

例子:

  • 如果您正在提供文件,请使用文件的 mtime 作为 Last-Modified 日期是最简单的解决方案。
  • 如果您正在提供由多个 SQL 查询构建的动态网页,则检查这些查询返回的数据是否已更改可能是不切实际的(除非所有查询都有某种“上次修改”列)。在这种情况下,使用例如页面内容的 md5 哈希值作为 ETag 会容易很多。
    OTOH,这意味着您仍然必须在服务器上生成整个页面,即使对于条件 GET 也是如此。弄清楚 ETag 中到底包含哪些内容(主键、修订号……等)可以在这里为您节省大量时间。

有关该主题的更多详细信息,请参阅以下链接:

其他提示

If-Modified-Since 相比 Last-ModifiedIf-None-Match 相比 ETag.既 Modified-SinceETag 可用以识别一个特定的变异的资源。

但比较 If-Modified-SinceLast-Modified 为您提供的信息是否缓存的变体 老年新的 而比较 If-None-MatchETag 只是给您的信息是否两者都是 相同的 或者不是。此外做大部分的 ETag 发电机,包括信息系统的具体 inode 所以移动一个文件的不同驱动可能会改变的 ETag 为好。

在上次修改/的If-Modified-由于具有有限的精度使用

时间戳值 - 一个第二和那是不够的快速改变的内容等,用于在多于一个的消息可以在张贴例如,Web的聊天应用任何给定的第二次。 ETag的/ IF-无 - 匹配可以帮助解决这个问题。

正如在谷歌的最佳实践指出:

  

指定的一个重要的是过期或缓存控制最大年龄,和Last-Modified或ETag中的一个,所有可高速缓存的资源。它是多余的同时指定过期和Cache-Control:max-age的,或同时指定上次修改和ETag

https://developers.google.com/speed/docs/best-practices/caching

如果修改的-因为 使用的日期,同时 如果没有匹配的 使用 ETag.他们既可以被用于"网页"(即HTML)和其他文件。

除非服务器表述为弱,一个ETag被认为是一种强验证器,并且因此可以用于satify有条件不等请求。然而,大多数自动生成服务器场的情况下的ETag展览的困难,因为他们经常使用inode信息和/或唯一持久的计数器。在实践中,我已经找到了上次修改头足以满足相当静态的内容,例如服务了受保护的静态内容,因为文件的写入时间使一个相当不错的验证。

在ETag的是迄今为止最灵活。符合客户端需要发送的ETag的一个条件请求,而他们都很如果可用发送。

在的If-Modified-Since标题用于指定在该浏览器中最后接收到的所请求的资源的时间。对IF-None-Match头用于指定与所请求的资源时发出上次服务器接收的实体标记。

在所述的两种方法,这些标头被用于支持在浏览器中的内容高速缓存,并且它们使服务器能够指示浏览器使用的资源的高速缓存副本,而不是与资源的全部内容响应如果这是没有必要的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top