【问题标题】:How can I programmatically tell if a binary file on a website (e.g. image) has changed without downloading it?如何在不下载的情况下以编程方式判断网站上的二进制文件(例如图像)是否已更改?
【发布时间】:2025-12-20 09:30:04
【问题描述】:

如何在不下载的情况下以编程方式判断网站上的二进制文件(例如图像)是否已更改?有没有办法在完全下载之前使用 HTTP 方法(在本例中为 C#)进行检查?

【问题讨论】:

  • 我不这么认为;如果你请求一个实际的文件,你只会得到一个八位字节流。 AFAIK 规范中没有允许您以您需要的方式询问文件属性的调用,但我很想知道是否有办法......

标签: c# .net http download


【解决方案1】:

确实,您希望在发出 HEAD 请求(而不是 GET)后查找 Last-Modified 标头。我写了一些代码来通过WebClienthere获取HEAD

【讨论】:

  • 应该注意,并非所有网站都提供正确的 Last-Modified 标头,即使它们应该正确缓存其网站。
  • 但是如果服务器不遵守规则,你能做的也只有这么多。
  • 如果服务器没有提供正确的缓存控制标头(Last-Modified 等),那么除了下载文件并比较内容之外,没有办法判断文件自特定时间以来是否已更改.
【解决方案2】:

您可以通过HEAD请求检查文件是否被更改。

然后,返回的响应标头可能包含 Last-ModifiedETag(如果 Web 服务器支持)。

【讨论】:

  • 同意,ETag 是解决此问题的最佳解决方案。
  • 是的,这就是我所做的解决方案中的方法。 i ETag 存在使用它,否则回退到 Last-Modified。
【解决方案3】:

您可以发出 HEAD 请求并检查最后修改的日期时间值以及内容长度。

【讨论】:

  • 感谢您提到内容长度:这是一个简单的检查,但如果服务器设置不正确,这是一个很好的后备