【发布时间】:2014-11-22 04:34:06
【问题描述】:
按照接受的答案here on SO,我正在尝试创建一个可使用 PHP 编辑的样式表。
发生了什么事...
我正在尝试将样式表(名为 css.php)缓存在用户的浏览器中,这样他/她就不必在每次页面加载时都加载它,并设置了以下标题:
header('Content-Type: text/css;;charset=UTF-8');
header('cache-control: max-age=86400;');
header('Last-Modified: Tue, 15 Nov 1994 12:45:26 GMT;');
header('Expires: Sat, 22 Nov 2014 16:00:00 GMT;');
header('cache-control: max-age=86400;');
这些是默认发送的其他标头:
Connection:"Keep-Alive"
Content-Encoding:"gzip"
Content-Length:"393"
Date:"Fri, 21 Nov 2014 17:00:50 GMT"
Keep-Alive:"timeout=5, max=99"
Server:"Apache"
Vary:"Accept-Encoding"
X-Frame-Options:"SAMEORIGIN"
但是,在加载多次引用 css.php 页面的页面时,它会继续每次都重新加载 CSS 页面。
我怎么知道...
每次我在我的 apache 服务器访问日志中加载使用样式表的页面时,我都会收到对 css.php 页面的点击。
我可以看到我的 Firefox 浏览器正在访问 Inspect Element 工具中的 css.php 页面。它每次都收到HTTP 200。
我该怎么办?
【问题讨论】:
-
需要提前设置headers过期时间。您今天设置它,浏览器通常会缓存 css,当有人更改 css 并且浏览器具有缓存版本时通常会出现问题,因此更改不会显示,这是倒退...
-
今天是 21 号。另外,这里的 CSS 没有正常缓存,因为它伪装成 PHP 文件。
-
即使项目被缓存,接收 HTTP 200 也是正常的。您需要查找的是
(from cache),它显示在 Chrome DevTools 的大小/内容列中(不知道 firefox)。另请记住,大多数开发工具默认禁用该缓存,您可能需要取消选中disable cache复选框(在 chrome 中,它位于网络面板的顶部) -
@billy 别担心,我也失去了几天... :)
-
当我在评论框中写字时,页面被向下滚动,因此无法同时看到 tp 框..注意自己,正确阅读问题....