代码之家  ›  专栏  ›  技术社区  ›  JohnIdol

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

  •  3
  • JohnIdol  · 技术社区  · 16 年前

    这是一个危险的容易的事情,我觉得我应该知道更多-但我不知道,也找不到很多。

    问题是: 浏览器究竟如何知道网页发生了变化?

    直觉上,我会说f5刷新了给定页面的缓存,并且该缓存仅用于历史导航,并且有一个到期日期——这让我觉得浏览器永远不知道网页是否发生了变化,如果缓存消失,它只会重新加载页面——但我确信情况并非总是如此。

    感谢您的指点!

    4 回复  |  直到 16 年前
        1
  •  6
  •   Seth    16 年前

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

    例如,最后一个修改过的标题告诉浏览器页面有多旧。浏览器可以向页面发送一个简单的头部请求,以获取最后修改的值。如果它比浏览器缓存中的更新,那么浏览器可以重新加载它。

    还有一堆与缓存相关的头(如缓存控制)。退房: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

        2
  •  10
  •   Jonathan Feinberg    16 年前
        3
  •  2
  •   LorenVS    16 年前

    你走的是正确的道路,正如乔纳森所说,没有什么比读医生更好的了。但是,如果您只想了解更多信息:

    有一些HTTP响应头允许服务器设置页面的可缓存性,这属于您的到期日期系统。然而,另一个重要的构造是HTTP头请求,它实质上检索给定页面的mime类型和内容长度(如果可用)。浏览器可以使用head请求来验证缓存中的内容…

    当然还有更多关于这个主题的信息,所以我建议你读一下这些文档…

        4
  •  2
  •   Brian R. Bondy    16 年前

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

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

    有条件的 得到 HTTP请求将返回的状态 304 Not Modified 如果没有变化。

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

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