C# HttpWebResponse LastModified

C# HttpWebResponse LastModified,c#,http,httpwebresponse,C#,Http,Httpwebresponse,HttpWebResponse.LastModified是否准确?它总是存在吗?我的项目是创建一种有针对性的网络爬虫,如果我要使用资源的哈希值或仅使用HttpWebResponse.LastModified属性来检查资源的“新鲜度”,我会感到困惑 使用散列值意味着每次检查资源时都要对其进行流式处理。这对整体性能有很大影响 如果我只检查HttpWebResponse.LastModified,它是否准确?HttpWebResponse.LastModified返回HTTPLast Modified

HttpWebResponse.LastModified是否准确?它总是存在吗?我的项目是创建一种有针对性的网络爬虫,如果我要使用资源的哈希值或仅使用HttpWebResponse.LastModified属性来检查资源的“新鲜度”,我会感到困惑

使用散列值意味着每次检查资源时都要对其进行流式处理。这对整体性能有很大影响


如果我只检查HttpWebResponse.LastModified,它是否准确?

HttpWebResponse.LastModified返回HTTP
Last Modified
响应头的值

HTTP响应头由发送响应的HTTP服务器设置。是否设置上次修改的
响应头以及是否将其设置为准确值完全取决于服务器


上次修改的
响应头是HTTP缓存验证模型的一部分。如果自
请求头修改后,它通常与
一起使用。您可能需要阅读详细信息。

这取决于您的目的

Last Modified意味着服务器很乐意继续使用具有相同Last Modified值的实体(或者更晚,虽然服务器的上次修改可能会返回,但在某些多服务器情况下可能会发生),但这意味着服务器很乐意继续使用具有相同Last Modified值的实体

E-tag更强大(如果它不是一个“弱”的E-tag,则更强大),因为它标识特定的实体(不同语言版本、不同内容类型版本或不同内容编码版本的E-tag将不同,除非它们实际上是同一实体[在一组受限的情况下可能发生])

两者都可能是“松散的”,因为服务器更改可能被认为是无关紧要的;服务器很高兴您继续使用前一个实体,因为它认为它是相同的(除了“强”电子标签,它必须指示八位字节到八位字节的标识以用于范围请求)

当然,两者都可能是完全错误的。虫子会发生。这就是说,当他们错了的时候,往往是相反的方向,在没有发生变化的情况下报告变化(一种有效的行为,允许人们对新鲜度过于谨慎;它不会造成损害,只会造成次优)

接下来的问题是,您是否需要知道服务器是否认为没有进行任何更改(大多数使用情况),或者确实发生了更改(几乎仅限于诊断工具)


除非您有明确的理由不这样做,否则请信任last modified和e-tag(但更信任e-tag)。

那么您认为我必须获取资源的哈希值吗?你知道还有别的办法吗?@Jojo:请读一读。它真的很容易阅读。您对验证模型和新鲜度模型部分感兴趣。还有ETag,我更喜欢它,而不是上次出现时修改的。Hi Jon,例如,资源是一个PDF文件。PDF文件的实际最后修改日期是否与响应的最后修改日期相同?嗯,资源不是文件,而是“例如,我们服务的当前文档”或PDF的任何用途。实体就是文件(实际发送的内容),每个资源可以有多个实体(不同的语言、不同的内容类型、不同的压缩类型)。对于其中的每一个,您几乎总是拥有与文件相同的实体的最后修改时间。在一些相对模糊的情况下,您可能会以不同的方式进行操作,但如果实体基于文件,您几乎总是这样做的。