了解服务器页面是否被修改

时间:2011-02-03 05:25:43

标签: java httpclient httpresponse

我需要检查服务器是否修改了页面内容,以便我可以再次检索该页面。我尝试使用httpClient方法使用标题响应的“Last-Modified”和“ETag”选项。但在许多页面中,这些值都缺失了。有什么其他方法可以在JAVA代码或任何开源工具中处理这个问题。

提前致谢

3 个答案:

答案 0 :(得分:0)

如果实体尚未被修改,则If-Modified-Since标头将返回HTTP 304,并且如果自标题中指定的日期以来已修改它,则将返回新实体。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.25

答案 1 :(得分:0)

比较两个Content-length标头?如果以某种方式修改页面,它很可能不会完全相同。不是完美的解决方案,但足以满足实际考虑。

答案 2 :(得分:0)

唯一可以确定的方法是检索页面并自己将旧版本与旧版本进行比较。 Last-Modified标头不可靠,因为它可能不存在,或者某些不希望动态内容重新编入索引的网站(无论出于何种原因)可能会故意欺骗它。内容长度标题也可能不存在,因此您不一定依赖于此。

当您比较页面内容时,您必须决定是否对所有更改感兴趣 - 或者仅更改页面的相关内容区域,例如不包括菜单,日期时间等动态元素......

如果比较你自己,你可以只检查相应文件的长度,绝对相同,或者提取页面的相关内容区域并进行文本比较。要比较类似页面,您还可以使用“sim-hash”,其中类似数据的哈希值彼此接近(与通常的稀疏哈希相反)。