HttpWebResponse.LastModified准确吗?它是否总是存在?我的项目是创建一种专注于网络爬虫,如果我将使用资源的哈希值或仅使用HttpWebResponse.LastModified属性来检查资源的“新鲜度”,我就会陷入困境。
使用哈希值意味着每次检查资源时都要流式传输资源。这对整体性能有很大影响。
如果我只检查HttpWebResponse.LastModified,它准确吗?
HttpWebResponse.LastModified准确吗?它是否总是存在?我的项目是创建一种专注于网络爬虫,如果我将使用资源的哈希值或仅使用HttpWebResponse.LastModified属性来检查资源的“新鲜度”,我就会陷入困境。
使用哈希值意味着每次检查资源时都要流式传输资源。这对整体性能有很大影响。
如果我只检查HttpWebResponse.LastModified,它准确吗?
HttpWebResponse.LastModified返回HTTP响应头中Last-Modified
的值。
HTTP响应头是由HTTP服务器发送响应时设置的。服务器完全可以自行决定是否设置Last-Modified
响应头,以及是否将其设置为准确值。
Last-Modified
响应头是HTTP缓存验证模型的一部分。通常与If-Modified-Since
请求头一起使用。您可能需要阅读HTTP/1.1, part 6: Caching了解详细信息。
这取决于您的目的。
Last-Modified表示服务器允许您继续使用具有相同last-modified值(或者隐含地更晚)的实体(在某些多服务器情况下,服务器的last-modified可能会回退,但这很奇怪)。
E-tag更强大(如果它不是“弱”e-tag,则更加强大),因为它标识特定的实体(不同语言版本、不同内容类型版本或不同内容编码版本的e-tag将不同,除非它们实际上是相同的实体[在一组受限制的情况下,这是可能发生的])。
两者都可以“松散”,即可能认为服务器更改是不重要的;服务器愿意让您继续使用先前的实体,因为它认为它是相同的(除了“强”的e-tag,必须指示用于范围请求的八位字节身份)。
当然,两者都可能是错误的。出现错误是很常见的。尽管如此,在它们错误时,更常见的情况是报告发生了变化,而实际上没有发生变化(这是一种有效的行为,人们可以对新鲜度过于谨慎;它从不损坏,只是使次优)。
那么问题是,您是否需要知道服务器认为没有进行任何更改(大多数情况下),还是确实发生了更改(几乎只用于诊断工具)。
除非您有明确的理由不这样做,否则请相信last-modified和e-tag(但更相信e-tag)。