我在localhost上有一个php网站,它一直运行良好,但现在它只显示旧css文件和旧js文件。当我编辑文件和刷新页面时,没有任何变化。
尤其是css布局文件不想更新
我使用:xampp和apache
关于这个问题,我读了很多关于stackoverflow的文章,但是没有一篇对我的工作有效,我尝试添加了:
<?php
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Content-Type: application/xml; charset=utf-8");
?>
但这给出了一个错误:
此页包含以下错误:第8列第44行的错误:开始和结束标记不匹配:链接行0和下面的标题是第一个错误之前的页呈现。
然后它将页面作为文档处理,只显示纯文本。
我试过使用.htaccess文件,但没用。
我真的不知道如何处理这个问题,我不能继续在网站上,因为它只是不想更新,它是卡在一个旧的页面。
有人能帮我解决这个问题吗,因为我有点绝望了。
编辑:
所以我修正了这个错误,但是仍然没有更新
我将php改为:
<?php
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
?>
因为它将我的页面显示为xml,但这仍然不会更新布局。
如何让我的页面自动重新加载文件,所以没有(ctrl+f5)。
2条答案
按热度按时间t1rydlwq1#
只有当html页面的文档类型为xhtml时,才会发生此错误。您可以通过查看文档的第一行来检查这一点,它声明了一个xthml doctype:
这意味着所有的html标签都必须正确关闭,例如。
注意
</link>
我在第三行加的。解决这个问题的最简单方法是将doctype改为这意味着你的文件不必格式良好。
另一种方法是关闭所有html标记。
我建议您试试这个,如果缓存问题仍然存在,请再次提出要求。
并且不缓存样式表文件
最简单的方法是只要在样式表文档中添加一个新参数(例如带有版本号的?ver),无论何时更改样式中的某些内容:
这样就可以了,您不必对样式表的文件名做任何更改。
另一种更复杂的方法是安装mod\u expires并在apache2配置中定义它:
我希望这有帮助!如果是这样的话,我将很感激你能接受这个答案。
bnlyeluc2#
我做了3件事来确保动态数据不会被缓存:
设置合适的响应头;
包括html元标记;
向可能更改的资源URL添加时间戳。
1. 设置适当的响应头
基本上,这些头文件在过去设置了过期,设置了许多指令,以避免php输出和最终客户机之间的服务修改或缓存源文件。
2. 包括html元标记
一些代理和web客户端将解析html(应该避免使用上面的“no transform”指令)。因此,向html输出中添加指令可以进一步降低缓存的风险。
在这个html摘录中有两个“expires”规范——据我所知,有些web客户端不会解析日期。
3. 向可能更改的资源URL添加时间戳。
静态资源(或等效资源),如图像、css文件,但也包括xml文件、文本文件、字体等,应该缓存以提高性能,但在更新它们时仍然希望避免缓存。
通过向url添加时间戳,url将依赖于资源时间戳本身,并且它将阻止中间服务器提供缓存版本。
你可以用一个静态的“标签”来替换时间戳,比如“v1”,“v2”,等等。但是我更喜欢计算的时间戳,因为我不需要再考虑更新它了。事实上,几乎我所有的资源都是自动加时间戳的。
下面是一个php示例:
注意
有些指令可能是多余的,但最好是多余的,而不是让某个特定的用户遇到问题。以上是现场实际经验的结果。例如,“no transform”是在远程调试用户的环境后添加的,用户的移动运营商的代理将javascript和css资源直接插入到html中。这是相当出乎意料的,它创造了一个不受欢迎的行为在当时。
浏览器功能也会随着时间的推移而变化,当一些用户仍在使用旧浏览器时,有些用户将无法理解某些指令。
因此,我建议你谨慎行事,尽可能多地增加对策。