【问题标题】:Website with optimal cache control具有最佳缓存控制的网站
【发布时间】:2011-10-08 00:17:40
【问题描述】:

我的目标
我想让浏览器缓存我的整个网站,但只在我更改了一个或多个文件时才下载静态内容。

我的情况
经过一番研究,我找到了一种方法来做到这一点。即在我的 htaccess 文件中添加一个Far Future Expires Header,并使用filemtime() 函数向我的文件中添加一个查询字符串。

问题
当我点击地址栏并在 Firefox 中输入我的网站地址时,Firebug 会显示
38.3 KB (36.4 KB from cache)

当我在 Firefox 中按 F5 时,Firebug 显示:
241.1 KB (10.9 KB from cache)

现在我尝试对 Google 做同样的事情,他们正在发回 HTTP 标头 304。我已经阅读了很多关于 ETag 和 Last Modified 标头的内容,但是我听到很多人说它们并不可靠。

我的问题
如果我想在用户按下 F5(如 Google)时将 HTTP 标头 304 与我的静态内容一起发回,那么最好的解决方案是什么?

我问这个问题是因为我经常访问一个网站并使用 F5 来查看是否有一些新信息可用。不要重新加载图像等。


更新
似乎 Firefox 正在控制缓存的使用方式,我也想在用户按 F5 时使用缓存。

【问题讨论】:

    标签: php caching .htaccess header


    【解决方案1】:

    reload 的真正目的是重新加载页面。如果浏览器在用户明确要求时忽略缓存,则没有服务器端头魔法。

    Google 的解决方案是检查爬虫是否发送了 If-Modified-Since 标头:

    if ($_SERVER["HTTP_IF_MODIFIED_SINCE"]) {
        header("HTTP/1.0 304 Not Modified");
        exit();
    }
    

    此技巧适用于浏览器,但不适用于 强制重新加载 模式,例如 Firefox 的 SHIFT+RELOAD。

    【讨论】:

    • 我明白你在说什么。我的意思是我经常访问一个网站并使用 F5 来查看是否有一些新信息可用。不要重新加载图像等。其次,这是 PHP 代码。如何将它用于我的静态内容(例如图像)?
    • 对于您的静态内容,apache 的 mod_expires 应该可以解决问题。此外,如果浏览器发送 If-Modified_Since 标头,apache 将回复 304(或者至少如果不是,我会感到惊讶)。
    • 你也许可以找到一些 .htaccess 规则。只是猜测。
    【解决方案2】:

    您还可以使用较新的应用程序缓存功能。
    我不知道你的目标浏览器是什么,但到目前为止,大多数浏览器已经支持它的好几个版本了..
    这样你就可以定义你的静态数据只下载一次。

    有关该主题的一些非常好的信息,您可以查看此页面:
    http://diveintohtml5.ep.io/offline.html

    【讨论】:

    • 感谢您的回答,但我担心IE用户。
    【解决方案3】:

    我不确定我是否理解您的问题的意图,但您可以在 php 中使用 header 函数指定响应代码,无论您的用户是否按下按钮。

    http://php.net/manual/en/function.header.php

    【讨论】:

    • 我知道,但是我该如何处理我的图片、CSS 等?
    猜你喜欢
    • 2019-06-09
    • 2011-07-07
    • 1970-01-01
    • 2010-12-16
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2010-10-05
    相关资源
    最近更新 更多