如何检测网页内容是否与缓存版本不同

时间:2010-10-01 12:15:34

标签: caching http-headers webpage

你好 如您所知,网页内容的检查过程与我们机器上的静态页面或个人文件略有不同,因为每个请求都会更改动态网页的内容。因此,如果我们要使用校验和来识别变化,我们将失败!很简单的例子是网站所有者在他的网站上使用Google广告;每个请求广告都与以前不同。此外,如果我们只打算在一段时间内缓存,我们也会失败,因为有些网页每年都不会更新,但有些是每分钟(如果不是几秒钟)。

那么解决这个问题的更好方法是什么? (感谢)

更新

另一种选择是使用LastModified http-header!但这是强有力的方法吗?

1 个答案:

答案 0 :(得分:2)

浏览器借助HTTP提供的几种缓存机制自动执行此操作。对于确定页面是否已更改最明显有用的两种机制是实体标记上次修改 HTTP标头的概念。 这些机制允许浏览器向网站发出条件请求,例如。只有在页面被更改后才能获取页面。

在HTTP 1.1上引用RFC 2616

  

3.11实体标签

     

实体标签用于比较两个或多个实体     请求的资源。 HTTP / 1.1使用ETag中的实体标签(部分     14.19),If-Match(第14.24节),If-None-Match(第14.26节),和     If-Range(第14.27节)标题字段。他们是如何定义的     使用和比较缓存验证器在13.3.3节中。一个     entity标签由一个不透明的带引号的字符串组成,可能带有前缀     弱点指标。

这里的关键点是 ETag 缓存验证器。如果浏览器具有页面的缓存版本(在RFC中称为资源),则可以使用 ETag 来确定缓存页面是否仍然有效,即。如果服务器上的页面没有更改。

关于修改日期:

  

14.25 If-Modified-Since

     

If-Modified-Since请求标头字段与方法一起使用     使其成为条件:如果所请求的变体尚未修改     由于此字段中指定的时间,实体不会     从服务器返回;相反,304(未修改)响应将     在没有任何消息体的情况下返回。

这里的关键点是服务器可以知道页面何时被修改,然后可以通知客户端。

如果您打开HTTP监视器(例如Fiddler for Windows)并观察您的浏览器与网站通信,当浏览器发出条件请求时,您将看到这些机制的第一手使用。

要专门解决有关上次修改标题的问题,此标题本身不适用于您找到的大多数页面。但结合 ETag ,它可以帮助您入门。