如果改性-由于vs如果没有匹配的
题
可能是什么之间的差异如果改性-因为如果没有-比赛?我有一种感觉,如果没有匹配的是用于文件而如果改性-由于使用的页面?
解决方案
关于之间的差异 Last-Modified/If-Modified-Since
和 ETag/If-None-Match
:
两者可以互换使用。然而,根据资源的类型以及它在服务器上生成的方式,一个或另一个问题(“自...以来是否已修改?”/“这仍然与此 ETag 匹配吗?”)可能更容易回答。
例子:
- 如果您正在提供文件,请使用文件的
mtime
作为Last-Modified
日期是最简单的解决方案。 - 如果您正在提供由多个 SQL 查询构建的动态网页,则检查这些查询返回的数据是否已更改可能是不切实际的(除非所有查询都有某种“上次修改”列)。在这种情况下,使用例如页面内容的 md5 哈希值作为
ETag
会容易很多。
OTOH,这意味着您仍然必须在服务器上生成整个页面,即使对于条件 GET 也是如此。弄清楚 ETag 中到底包含哪些内容(主键、修订号……等)可以在这里为您节省大量时间。
有关该主题的更多详细信息,请参阅以下链接:
其他提示
If-Modified-Since
相比 Last-Modified
而 If-None-Match
相比 ETag
.既 Modified-Since
和 ETag
可用以识别一个特定的变异的资源。
但比较 If-Modified-Since
要 Last-Modified
为您提供的信息是否缓存的变体 老年 或 新的 而比较 If-None-Match
要 ETag
只是给您的信息是否两者都是 相同的 或者不是。此外做大部分的 ETag
发电机,包括信息系统的具体 inode 所以移动一个文件的不同驱动可能会改变的 ETag
为好。
时间戳值 - 一个第二和那是不够的快速改变的内容等,用于在多于一个的消息可以在张贴例如,Web的聊天应用任何给定的第二次。 ETag的/ IF-无 - 匹配可以帮助解决这个问题。
正如在谷歌的最佳实践指出:
指定的一个重要的是过期或缓存控制最大年龄,和Last-Modified或ETag中的一个,所有可高速缓存的资源。它是多余的同时指定过期和Cache-Control:max-age的,或同时指定上次修改和ETag
https://developers.google.com/speed/docs/best-practices/caching一>
除非服务器表述为弱,一个ETag被认为是一种强验证器,并且因此可以用于satify有条件不等请求。然而,大多数自动生成服务器场的情况下的ETag展览的困难,因为他们经常使用inode信息和/或唯一持久的计数器。在实践中,我已经找到了上次修改头足以满足相当静态的内容,例如服务了受保护的静态内容,因为文件的写入时间使一个相当不错的验证。
在ETag的是迄今为止最灵活。符合客户端需要发送的ETag的一个条件请求,而他们都很如果可用发送。
在的If-Modified-Since标题用于指定在该浏览器中最后接收到的所请求的资源的时间。对IF-None-Match头用于指定与所请求的资源时发出上次服务器接收的实体标记。
在所述的两种方法,这些标头被用于支持在浏览器中的内容高速缓存,并且它们使服务器能够指示浏览器使用的资源的高速缓存副本,而不是与资源的全部内容响应如果这是没有必要的。