如何获取http文件元数据?

时间:2020-03-05 18:55:32  来源:igfitidea点击:

如何获取文件的创建日期或者文件大小,例如http://www.mywebsite.com/now/Hello.jpg上的Hello.jpg(注意:此URL不存在)?该问题的目的是使我的应用程序在检测到该网站具有文件的更新版本并且本地文件夹中的文件已过期时,从任何网站重新下载文件。有任何想法吗?

解决方案

回答

如果使用HEAD请求,它将发送资源的标头,我们可以在其中检查缓存控制标头,该标头将告诉我们资源是否已被修改,最后修改时间,大小(内容长度)和日期。

$ telnet www.google.com 80
Trying 216.239.59.103...
Connected to www.l.google.com.
Escape character is '^]'.
HEAD /intl/en_ALL/images/logo.gif HTTP/1.0

HTTP/1.0 200 OK
Content-Type: image/gif
Last-Modified: Wed, 07 Jun 2006 19:38:24 GMT
Expires: Sun, 17 Jan 2038 19:14:07 GMT
Cache-Control: public
Date: Tue, 16 Sep 2008 09:45:42 GMT
Server: gws
Content-Length: 8558
Connection: Close

Connection closed by foreign host.

请注意,我们可能不得不根据每个Web服务器管理员的疯狂程度,用许多启发式方法来修饰这种基本而简单的方法,因为每个Web服务器都可以发送他们喜欢的任何标头。如果他们不提供缓存标头(上次修改,过期,缓存控制),Content-Length或者etag,则我们将不得不重新下载它进行测试。

回答

为此,网络服务器可能会发送最后修改的和/或者etag标头。
我们可能会在请求中发送if-modified-since标头。

参见http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
第14.19、14.25和14.29条