标头缓存似乎被忽略了

时间:2013-11-06 02:11:34

标签: php caching

我一直想知道我的缓存中出现了什么问题。

我设置了这个标题,以便它不会在网站(html,css,php)文件上缓存内容。

header('Cache-Control: no-cache, no-store, must-revalidate'); // HTTP 1.1.
header('Pragma: no-cache'); // HTTP 1.0.
header('Expires: 0'); // Proxies.

所以我继续在我的Mozilla上清除缓存,重新加载页面然后得到了这个:

enter image description here

看起来很好,因为状态是200 OK,现在我编辑了文件 style.css 然后刷新,结果如下:

enter image description here

它说304 Not Modified。我不是专家但不是那意味着它缓存文件?另外,我编辑了 style.css ,但没有出现我的更改。需要按Ctrl + F5重置它。那是为什么?

1 个答案:

答案 0 :(得分:0)

延伸自评论:

您在标题上所做的只会影响 资源 - 这很可能是PHP生成的HTML页面。

为了演示,这是一个简化的过程:

  • 浏览器:GET index.php
  • 服务器:PHP:Cache-Control: no-cache;输出内容......
  • 浏览器:GET style.css
  • 服务器:(默认标头;)输出style.css

因此,要让客户端不缓存CSS,您可以:

  1. 为HTTP服务器配置中的所有CSS添加其他标头。 Apache中的示例:

    <FilesMatch "\.css$">
        Header add Cache-Control no-cache
    </FilesMatch>
    
  2. 使用PHP重新分发CSS:

    <?php
    header("Content-Type: text/css");
    header("Cache-Control: no-cache");
    ?>
    body {
    /* ... */
    }
    
  3. 如果您不介意在每次编辑时修改HTML(或者如果您使用某种支持此功能的版本控制),您可以使HTML看起来像这样:

    <link rel="stylesheet" type="text/css" href="style.css?20131111" />