那么解决这个问题的更好方法是什么? (感谢)
更新
另一种选择是使用LastModified http-header!但这是强有力的方法吗?
答案 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 ,它可以帮助您入门。