0

我一直想知道我的缓存中似乎有什么问题。

我设置了这个标题,这样它就不会缓存网站(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 上清除缓存,重新加载页面然后得到这个:

在此处输入图像描述

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

在此处输入图像描述

它说 304 未修改。我不是专家,但这不是意味着它会缓存文件吗?另外,我编辑了style.css,我的更改没有出现。需要做一个 Ctrl+F5 来重置它。这是为什么?

4

1 回答 1

0

从评论扩展:

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

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

  • 浏览器:获取 index.php
  • 服务器:PHP Cache-Control: no-cache:;输出内容...
  • 浏览器:获取 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" />
    
于 2013-11-06T06:57:20.523 回答