有没有一种方法可以找出自更改网页以来经过了多少时间?
例如,我有一个网页托管在: www.mywebsitenotupdated.com
有没有一种方法可以确定何时将此HTML页面上载到服务器?
我无权访问服务器;只是该网页的链接。
Answers:
不,您仅通过访问页面就无法知道页面的最后更新时间,最后更改时间或上载到服务器的时间(根据解释的不同,这可能是三种不同的东西)。
服务器可以并且应该(根据HTTP 1.1协议)发送Last-Modified
标头,您可以通过多种方式找到标头,例如使用Rex Swain的HTTP Viewer。但是,根据协议,这仅仅是
“原始服务器认为该变体上次修改的日期和时间”。
该协议实际上增加了:
“此标头字段的确切含义取决于原始服务器的实现和原始资源的性质。对于文件,可能只是文件系统的最后修改时间。对于具有动态包含的零件的实体,它可能是其零件的最后修改时间集合中的最新时间。对于数据库网关,它可能是记录的最后更新时间戳。对于虚拟对象,这可能是内部状态最后一次更改。”
实际上,通常是从内容管理系统或其他方式动态创建网页,在这种情况下,Last-Modified
标头通常会显示创建响应的数据戳记,通常与请求时间非常接近。这意味着在这种情况下,标头实际上是无用的。
即使在“静态”页面的情况下(服务器只是简单地选择一个与请求匹配的文件并发送),Last-Modified
日期戳通常仅指示对服务器上文件的最后一次写访问。这可能与从备份副本还原文件的时间有关,或者与在服务器上编辑文件而不对内容进行任何更改的时间有关,或者与文件上载到服务器的时间(可能替换了较旧的文件)有关。相同的副本。在这些情况下,假设时间戳在技术上是正确的,则表示未更改页面的时间(但不一定是最后一次更改的时间)。
打开浏览器控制台(?)并输入以下内容:
javascript:alert(document.lastModified)
javascript:alert(document.lastModified)
不是实际日期
还有另一种查找页面更新的方法,该方法在某些情况下可能有用(如果可行:)。
如果页面已被Google或Wayback Machine索引,则您可以尝试找出它们保存了什么日期(这些方法不适用于任何页面,并且存在一些局限性,对此进行了广泛研究在这个webmasters.stackexchange问题的答案中,但是在许多情况下,它们可以帮助您找出页面更新日期:
要检查Last Modified
标题,可以使用httpie
(docs)。
pip install httpie --user
$ http -h https://martin-thoma.com/author/martin-thoma/ | grep 'Last-Modified\|Date'
Date: Fri, 06 Jan 2017 10:06:43 GMT
Last-Modified: Fri, 06 Jan 2017 07:42:34 GMT
的Date
重要性,因为这会报告服务器时间,而不是您的本地时间。同样,并非每个服务器都发送Last-Modified
(例如,超级用户似乎不这样做)。
这是一种Python方式:
import httplib
import yaml
c = httplib.HTTPConnection(address)
c.request('GET', url_path)
r = c.getresponse()
# get the date into a datetime object
lmd = r.getheader('last-modified')
if lmd != None:
cur_data = { url: datetime.strptime(lmd, '%a, %d %b %Y %H:%M:%S %Z') }
else:
print "Hmmm, no last-modified data was returned from the URL."
print "Returned header:"
print yaml.dump(dict(r.getheaders()), default_flow_style=False)
该脚本的其余部分包括一个示例,该示例存档页面并检查新版本是否有更改,并通过电子邮件提醒某人。
Last-Modified
标头是正确的,但是可以根据服务器对HEAD
请求的响应并基于对特定主机的服务器及其内容以及生成方式的了解来做出一些有根据的猜测。窥探他们的页面并在连接上带有嗅探器可以发现很多东西。