【问题标题】:PHP site not showing cache-control. Not caching anythingPHP 站点未显示缓存控制。不缓存任何东西
【发布时间】:2017-06-20 17:44:53
【问题描述】:

简介

我的任务是解决现有站点的问题,即没有缓存任何内容(浏览器会话除外)。关闭会话并再次打开浏览器时,页面会再次加载大量图像、JS 和 CSS。由于我每次都有约 60 件物品,因此存在很大的负载问题。

问题

查看 Chrome 控制台,Audit 显示 以下资源缺少缓存过期...

并且在“响应标头”中的网络项目中甚至没有显示“缓存控制”行。

尝试过的解决方案

我已在.htaccess 文件中设置信息并确保mod_expires 处于活动状态:

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/jpg "access 1 year"
    ExpiresByType image/jpeg "access 1 year"
    ExpiresByType image/gif "access 1 year"
    ExpiresByType image/png "access 1 year"
    ExpiresByType text/css "access 1 month"
    ExpiresByType text/html "access 1 month"
    ExpiresByType application/pdf "access 1 month"
    ExpiresByType text/x-javascript "access 1 month"
    ExpiresByType application/x-shockwave-flash "access 1 month"
    ExpiresByType image/x-icon "access 1 year"
    ExpiresDefault "access 1 month"
</IfModule>

我在 html 头中添加了Cache-control 元标记,该标记也显示在页面的代码源中,因此已编译。

<meta http-equiv="Cache-control" content="public" content="max-age=604800">

我想补充一点,它很可能不是服务器问题,因为生产页面的主机已将其设置为通常的默认值。 (而且我无论如何都无法访问该服务器)
如果有人可以给我一些关于我遗漏或未检查或根本不理解的内容的指示,我会非常高兴。

添加了 main.css 标头

谢谢!

【问题讨论】:

  • @eol 我已经在 html 元标记中使用 max-age 设置了 Cache-control 标头。
  • 无特定顺序... 1) ETag 应该做到这一点,让资产得到缓存。 2) HTML 元标记绝不会影响任何其他资源 3) &lt;IfModule mod_expires.c&gt; 表示:“如果模块不可用,请忽略我的代码,不要告诉我” 4) PHP 没有任何作用在资产交付中(除非这样做,在这种情况下您应该解释如何)
  • @MikelisBaltruks:作为参考,您可以查看stackoverflow.com/questions/49547/…

标签: apache caching


【解决方案1】:

你可以通过php设置标题,因为这是一个php站点。

<?php
  header("Cache-Control: max-age=2592000"); //30days (60sec * 60min * 24hours * 30days)
?>

您也可以在 .htaccess 中像这样使用 FilesMatch

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf)$">
    Header set Cache-Control "max-age=31536000, public"
</FilesMatch>

【讨论】:

  • 在 apache 服务器中激活了 mod_headers,添加了 FilesMatch 和 php header(),但仍然没有。默认标题为no-cachemax-age:0
  • 可以发main.css headers的截图吗?
  • 已添加到问题中(最后一张图片)
  • 我注意到,main.css 中没有缓存控制标头。这意味着不知何故 .htaccess 文件没有做它应该做的事情。尝试将 FilesMatch 指令添加到网站的 apache 配置文件中,然后重新启动 apache。
  • @MikelisBaltruks你是如何激活 mode_headers 的?
【解决方案2】:

好吧,虽然很愚蠢(如我所料),但我没有在任何地方读到它,只是忘记了它的必要性。

解决方案

结果所有这些事情都改变了(正如我所说的,一切都在服务器上激活,访问文件等)。问题是我没有更改缓存信息后清除缓存。现在三天后我开始研究一些 CSS,需要重置缓存和繁荣 - 所有新标题对所有项目都是活动的。

【讨论】:

    猜你喜欢
    • 2019-03-16
    • 2012-03-03
    • 1970-01-01
    • 2021-03-25
    • 1970-01-01
    • 2011-04-04
    • 2015-08-10
    • 1970-01-01
    • 2014-12-20
    相关资源
    最近更新 更多