HttpWebResponse.LastModified是否准确?它总是存在吗?我的项目是创建一种专注的Web爬虫,如果我将使用资源的哈希值或仅使用HttpWebResponse.LastModified属性来检查资源的“新鲜度”,我就会陷入困境。
使用哈希值意味着每次检查时都会流式传输资源。这对整体表现有很大影响。
如果我只检查HttpWebResponse.LastModified,它是否准确?
答案 0 :(得分:5)
HttpWebResponse.LastModified返回HTTP Last-Modified
响应标头的值。
HTTP响应标头由发送响应的HTTP服务器设置。如果它设置了Last-Modified
响应标头,并且是否将其设置为准确值,则完全由服务器决定。
Last-Modified
响应标头是HTTP中缓存验证模型的一部分。它通常与If-Modified-Since
请求标头一起使用。您可能需要阅读HTTP/1.1, part 6: Caching了解详细信息。
答案 1 :(得分:3)
这取决于你的目的。
Last-Modified意味着服务器很高兴您继续使用具有相同最后修改值的实体(或稍后暗示,尽管服务器的最后修改后的内容会很奇怪,但是但可能会在某些多服务器情况下发生。)
电子标签更强大(如果它不是“弱”电子标签,则更多),因为它标识特定实体(不同语言版本的电子标签,不同的内容类型版本或不同的内容编码版本会有所不同,除非它们实际上是同一个实体[在一组有限的情况下可以发生]。)
就服务器更改而言,两者都可能是“松散的”,被认为是微不足道的;服务器很高兴您继续使用上一个实体,因为它认为它是相同的(“强”电子标签除外,它必须指示用于范围请求的八位字节到八位字节的身份。)
两者当然都可能是完全错误的。虫子发生了。也就是说,当他们错了时,往往会向另一个方向发生变化,在没有发生变化时报告变化(一个有效的行为,一个人可以对新鲜度过于谨慎;它永远不会损坏只会使次优)。
接下来的问题是,您是否需要知道服务器认为没有进行任何更改(大多数用法)或者确实存在更改(几乎仅限于诊断工具)。
除非您有明确的理由不信任,否则请相信最后修改和电子标记(但更多信任电子标记)。