1

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

为了结合javascripts文件减少http请求,我把它们放到php中,一个不头痛的简单小而快乐的解决方案,可以缓存半年。(如果有更多的事情像这样工作,生活会更好吗?) 一个“一劳永逸”的解决方案。所以我强...

该网站运行良好,除了在查看 php 生成的 js 文件的标题时,似乎出现了这个 showstopper:

An If-Modified-Since conditional request returned the full content unchanged.

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(); 
?>
4

1 回答 1

2

要处理“If-Modified-Since”标头,您需要解析该标头并将其与您的最后修改日期进行比较。这不会自动完成,除非您的 Web 服务器前面有像 Varnish 这样的 HTTP 缓存。在 PHP 中,如果日期令人满意,则不渲染正文,而是返回304 Not Modified响应。这是一个很好的例子。[php.net]

您收到的资产请求多于预期的原因是您没有设置 Cache-Control 或 Pragma 标头。你可能想做:

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

如果您希望客户端不时检查更新,您可能不想设置这么长的 max-age...

于 2011-02-14T00:55:56.550 回答