有没有办法确定HTTP服务器上托管的文件版本而无需下载整个文件?

时间:2013-06-06 20:49:37

标签: c++ windows http

问题陈述: 我正在Windows上用C ++设计文件下载管理器API(VS 2010)。我需要添加一个功能,只有当服务器上有更新的版本时,组件才会下载文件,以避免不必要的下载。

有没有办法确定服务器上是否有更新版本的文件而不下载文件本身?

编辑:我无法访问Web服务器上的/ control以在服务器上托管Web服务等。

提前谢谢!

-SF

1 个答案:

答案 0 :(得分:1)

你可以:

  1. 向服务器发送HEAD请求并查看响应的Last-Modified和/或ETag标头。如果您是第一次下载文件,或者标题值与先前下载中保存的标题值不匹配,则向服务器发送GET命令以下载最新文件并保存下次新的标题值。

  2. 如果您之前已经下载过一次文件,则可以向服务器发送“有条件”GET请求,而不先发送HEAD请求。要使请求“有意义,请:

    一个。包含If-Modified-Since标头,其中包含上次下载的Last-Modified标头的值。

    湾添加If-Match标头,其中包含之前下载的ETag标头的值。

  3. 在“条件”GET请求中,如果文件尚未在服务器上修改(文件的当前标头值仍然与您请求的If-值匹配),则服务器将发送304 Not Modified回复而不发送任何文件数据。如果文件已在服务器上修改,或者服务器不支持“条件”GET请求,则会发送200 OK回复而不是当前文件数据。