浏览器如何知道网页已更改?

时间:2009-12-07 20:37:29

标签: browser caching

这是一件非常容易的事,我觉得我应该知道更多 - 但我没有,也找不到多少。

问题是:浏览器知道网页的确切变化是什么?

直观地说,我会说F5刷新给定页面的缓存,并且该缓存仅用于历史导航并且具有到期日期 - 这使我认为浏览器永远不知道网页是否已更改,并且它如果缓存消失,只需重新加载页面 - 但我确信情况并非如此。

任何指示赞赏!

4 个答案:

答案 0 :(得分:10)

答案 1 :(得分:6)

浏览器通常会通过随页面发送的HTTP标头获取此信息。

例如,Last-Modified标头告诉浏览器页面的年龄。浏览器可以向页面发送简单的HEAD请求以获取最后修改的值。如果它比浏览器在缓存中的更新,那么浏览器可以重新加载它。

还有一堆与缓存相关的其他标头(如Cache-Control)。查看: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

答案 2 :(得分:2)

Web浏览器发送HTTP请求,并接收HTTP响应。然后,他们显示HTTP响应的内容。通常,HTTP响应将包含HTML。许多HTML元素可能需要新的请求来接收页面的各个部分。例如,每个图像通常是另一个HTTP请求。

有HTTP标头指示页面是否是新的。例如,上次修改日期。 Web浏览器通常使用条件GET(条件头字段)或HEAD请求来检测更改。 HEAD请求仅接收标头,而不是请求的实际资源。

如果没有更改,条件GET HTTP请求将返回304 Not Modified状态。

然后可以根据以下内容更改页面:

  • 用户输入
    • 用户输入后,可以根据没有回发的javascript代码进行更改
    • 用户输入后,向服务器发出新请求并获得一个全新的(可能是相同的)页面。
  • Javascript代码可以在页面加载后运行,并随时更改内容。例如,您可能有一个计时器可以更改页面上的内容。
  • 某些页面还包含将滚动或闪烁或具有其他行为的HTML标记。

答案 3 :(得分:2)

你正在走上正轨,正如乔纳森所说,没有比阅读文档更好的了。但是,如果您只想了解更多信息:

有HTTP响应标头可让服务器设置页面的可缓存性,该页面属于您的到期日期系统。但是,另一个重要的构造是HTTP HEAD请求,它基本上检索给定页面的MIME类型和内容长度(如果可用)。浏览器可以使用HEAD请求来验证缓存中的内容......

关于这个主题肯定有更多的信息,所以我建议阅读文档...