0

用于缓存控制、mod 重写和 php 标头标记的 html 元标记

<filesMatch ".(ico|gif|jpg|jpeg|png|flv|pdf)$">
  Header set Cache-Control "max-age=29030400"
</filesMatch>

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

header('Expires: Thu, 01-Jan-70 00:00:01 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Cache-Control: no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');

哪个缓存系统更好,为什么?php、htaccess 还是元标记?

4

2 回答 2

3

他们都不是。

只有您的第一个选项实际上会告诉浏览器缓存图像(尽管它与 mod_rewrite 无关)。

但是,无论如何我都不会打扰 max-age 。浏览器缓存图像已经足够好了,无需手动强制

于 2013-01-19T16:20:28.687 回答
0

除了您的示例在每种情况下设置不同的标题和值之外,浏览器中的结果将与您使用的任何方法相同。主要区别在于每个文件可以应用于的文件类型:

  • <meta>标签只能出现在 HTML 文档中;因此,您不能使用它来控制非 HTML 文件(例如图像)的缓存有效性,并且有可能在不处理 HTML 和发现标记的情况下下载文件。
  • PHPheader()函数可以影响您使用 PHP 动态提供的任何文件。例如,这可能包括纯文本或 XML 文件,但可能不包括您上传到服务器的完整格式的 HTML 文件。您可以通过 PHP 传递静态文件,包括图像,但这是一种低效的服务方式。
  • ApacheHeader指令(不是 的一部分mod_rewrite)可以应用于Apache 正在服务的任何文件,无论它是否是动态生成的。这可以包括图像、静态 HTML、CSS 和 JS,以及您使用 PHP 生成的任何内容。

Apache 指令的唯一缺点是,根据您的设置以及您对 Apache 配置规则的经验,为不同的数据位维护更复杂的规则可能会更复杂。header()因此,对于已经用 PHP 处理的数据,如果您想要更细粒度的控制,您可能希望使用该函数构建一些东西。

于 2013-01-19T16:31:27.393 回答