php - 具有最佳缓存控制的网站

标签 php caching .htaccess header

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

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

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

当我在 firefox 中按 F5 时,Firebug 显示:
241.1 KB(缓存中有 10.9 KB)

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

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

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


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

最佳答案

reload 的真正目的是重新加载页面。如果浏览器在用户特别要求时忽略缓存,那么服务器端 header 就没有魔力了。

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

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

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

关于php - 具有最佳缓存控制的网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5180135/

相关文章:

php - 我对 PHP session 的理解是否正确?

html - Web 组件 - 内部浏览器缓存

php - 包含带有 .htaccess 的子文件夹

php - 如何按PHP中给定键的值对关联数组的数组进行排序?

php - 带有 php 问题的代号一推送通知

php - 带有辅助查询的 SQL 分隔符

php - 在 htaccess 文件中为 SSL 连接重写链接

php - 为什么我网站上的所有 html 表单都禁用了 Internet Explorer 自动完成功能?

sorting - 在 Redis 中缓存可排序/可过滤的数据

php - 使用 .htaccess 将子域重定向到特定目录