【问题标题】:Explicitly cache PHP pages client-side在客户端显式缓存 PHP 页面
【发布时间】:2012-09-17 14:04:54
【问题描述】:

我有以下 PHP 脚本(比如 cache.php):

<?php
 Header("Cache-Control: public");

 $offset = 60 * 60 * 24 * 3;
 $ExpStr = "Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT";
 Header($ExpStr);

 echo "Hello world";
?>

据我了解,这应该使浏览器在第一次访问它时存储其输出的缓存版本,然后在接下来的 3 天内提供此版本,甚至无需向服务器发送请求。不幸的是,情况并非如此(使用 apache 2.2),有没有人有任何有用的见解? (显然我可以在 PHP 脚本中强制使用 304 标头,但这不是必需的)

谢谢

【问题讨论】:

  • 使用 Apache 的 mod_expires 处理 Cache-controlExpires 标头。
  • 我可能不是 100% 正确,但这会在您每次访问页面时设置过期标头,从而无限期保留缓存版本
  • @webbandit:想详细说明一下吗?我尝试设置 ExpiresByType 文本/html“访问加 1 年”,但浏览器(铬和火狐)仍然总是点击脚本并获得 200,尽管响应标头包含“Cache-Control:max-age= 31536000, public" 我用 ExpiresByType 设置(顺便说一句,它适用于其他文件类型,文本/css 等)

标签: php apache browser-cache cache-control


【解决方案1】:

看来我的错误是通过按 F5 检查是否发生缓存,这(与图像、css 等其他资源不同)显式从服务器获取新条目,而不是呈现存储的条目。为了检查缓存,应该保留指向相关页面的链接(在不同的页面上),并且仅通过单击来检查缓存的页面是否被提供。

附带说明,如果 php 页面正在使用会话,session.cache.limiter 也会影响缓存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    • 2014-12-14
    • 2014-03-07
    • 2012-02-16
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多