Apache 在一个简单的javascript缓存上,如果修改了,因为头部已经就位!

Apache 在一个简单的javascript缓存上,如果修改了,因为头部已经就位!,apache,mod-rewrite,header,cache-control,if-modified-since,Apache,Mod Rewrite,Header,Cache Control,If Modified Since,地球人好!一段时间以来,我一直在幻想可能的解决方案,但对于这个奇怪的问题,我已经找不到线索了。让我描述一下原因,然后是问题: 为了组合javascripts文件以减少http请求,我将它们放入php中,这是一个不那么简单但却很愉快的解决方案,可以缓存半年。(如果更多的事情都是这样,生活会更好吗?)。所以我想 该网站运行良好,但在查看php生成的js文件的标题时,似乎出现了以下情况: If-Modified-Since条件请求返回的完整内容保持不变。 php生成的combined.js文件有什么问

地球人好!一段时间以来,我一直在幻想可能的解决方案,但对于这个奇怪的问题,我已经找不到线索了。让我描述一下原因,然后是问题:

为了组合javascripts文件以减少http请求,我将它们放入php中,这是一个不那么简单但却很愉快的解决方案,可以缓存半年。(如果更多的事情都是这样,生活会更好吗?)。所以我想

该网站运行良好,但在查看php生成的js文件的标题时,似乎出现了以下情况:

If-Modified-Since条件请求返回的完整内容保持不变。

php生成的combined.js文件有什么问题?非常感谢您的建议性回答

下面的文件allcombined.js>

<?php
header("Content-type: text/javascript; charset=UTF-8");
header("Expires: " . gmdate ("D, d M Y H:i:s", time() + 2419200) . " GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s", time() - 604800) . " GMT");

ob_start("compress");

include('script1.js');
include('script2.js');
include('script3.js');

ob_end_flush(); 
?>

要处理“If Modified Since”标题,您需要解析该标题并将其与上次修改日期进行比较。除非在web服务器前面有一个类似Varnish的HTTP缓存,否则这不会自动完成。在PHP中,如果日期令人满意,则不呈现正文,而是返回
304 not Modified
响应。[php.net]

您收到的资产请求比预期的多,原因是您没有设置缓存控制或Pragma头。您可能想做:

header("Cache-Control: public, max-age=2419200");
header("Pragma: public");

如果你想让客户端时不时地签入更新,你可能不想设置这么长的最长期限…

检查这个:特别是@Keith的答案+1谢谢Wuputah,但是即使添加两个标题,问题仍然是一样的:200而不是304!?谢谢,对不起,我犯了错误,我想我对第一部分的某些方面理解得不够透彻,比如我的共享主机上是否有清漆等。我将更深入地探讨这一点(以及你的php.net链接)并报告。