代码之家  ›  专栏  ›  技术社区  ›  Umair Jabbar

浏览器如何处理过期头、缓存控制头、上次修改的头?

  •  5
  • Umair Jabbar  · 技术社区  · 16 年前

    我是一个Web开发人员,曾与php和.net一起工作过。在网上工作一年多了,我还没有完全理解浏览器缓存功能,我希望这里的网络专家可以帮助我。我脑海中的问题是:

    • 浏览器如何实际缓存内容,它是否请求查看缓存的文件是否在服务器上发生了更改,
    • 什么是开发人员充分利用浏览器缓存的理想方式,而且能够在站点上毫无障碍地推动新的更改。我认为,如果浏览器以某种方式缓存了我的CSS、JS和图像,然后每次都检查它们对服务器的修改,这就可以解决问题了。但我不知道该怎么做。
    3 回复  |  直到 12 年前
        1
  •  4
  •   HttpWatchSupport    16 年前

    此日志可能有助于:

    http://blog.httpwatch.com/2007/12/10/two-simple-rules-for-http-caching/

    它解释了如何使用缓存,同时保持在需要时进行更改的能力。

        2
  •  2
  •   user151323    16 年前

    对于CSS文件,标准的“解决方法”是递增地向链接添加参数:

    <link rel="stylesheet" href="http://mysite.com/styles.css?v=1">
    <link rel="stylesheet" href="http://mysite.com/styles.css?v=2">
    ...
    

    这将强制浏览器重新加载文件。

        3
  •  0
  •   user    12 年前

    如果您使用的是服务器端语言,则可以强制浏览器再次下载该文件。

    <script src="script.js?<?= uniqid(); ?>">
    <img src="myfile.jpg?<?= uniqid(); ?>">
    

    但是,如果您想拥有一个更快的站点,那么在您开始禁用缓存之前,请记住,缓存中的任何内容都不必再次下载。

    还有一种方法可以控制需要缓存的内容, HTML5 Application Cache ,将缓存逻辑转储到清单文件中。因此,在清单文件本身更改之前,不会再次下载清单中的每个文件。

    请记住,如果您在JS、CSS、图像文件中更改了某些内容,并且需要将该更改推送到经常访问的访问者,那么您还需要更新清单文件。您可以像添加发布日期一样添加,这样浏览器就知道它是一个新的清单,它将再次下载所有内容。