PHP网站未显示缓存控制。未缓存任何内容。

6

简介

我有一个任务,需要解决现有网站的问题,即除了浏览器会话之外,没有任何内容被缓存。当关闭会话并再次打开浏览器时,页面会重新加载许多图像、JS和CSS。由于每次有大约60个项目,因此存在很大的负载问题。

问题

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

而在“响应标头”中的网络项甚至不显示“cache-control”行。 Response Head

尝试的解决方案

我已经在.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标题 在此输入图片描述

谢谢!


这可能很有趣:https://dev59.com/rXA75IYBdhLWcg3wPmd8 - eol
我已经在HTML元标记中设置了Cache-control头部,包括max-age。 - Mike B
以任何特定顺序... 1)ETag应该确保资源被缓存。2)HTML元标签绝不会影响到其它资源。3)<IfModule mod_expires.c>的意思是:“如果该模块不可用,只需忽略我的代码,不要通知我”。4)PHP在资源交付中不扮演任何角色(除非它有,那么您应该解释如何)。 - Álvaro González
@MikelisBaltruks:你可以参考这个链接:https://dev59.com/03VD5IYBdhLWcg3wNY1Z - vijay
2个回答

1

虽然有些愚蠢(正如我所预料的),但我没有在任何地方看到它,也忘记了它的需要。

解决方案

事实证明,所有这些东西都发生了变化(就像我说的,服务器上激活了所有东西,访问文件等等)。问题在于我没有在更改缓存信息后清除缓存。现在,三天后我开始处理一些CSS,需要重置缓存,结果新的标题对所有项目都生效了。


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 - Mike B
你可以发送一张 main.css 文件头的截图吗? - xhulio
已添加到问题中(最后一张图片) - Mike B
据我注意,main.css 中没有缓存控制头。这意味着 .htaccess 文件没有按照预期工作。请尝试在网站的 Apache 配置文件中添加 FilesMatch 指令,并重新启动 Apache。 - xhulio
@MikelisBaltruks,你是如何激活 mode_headers 模式的? - Vaibhav Kumar
感谢您的帮助 - 因为尝试而点赞。如果您对超级智能解决方案感兴趣,请阅读我的答案。xD - Mike B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接