首页  >  文章  >  后端开发  >  如何在 PHP 中利用 HTTP 缓存标头来增强 Web 性能?

如何在 PHP 中利用 HTTP 缓存标头来增强 Web 性能?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-05 16:18:02454浏览

How can I utilize HTTP cache headers with PHP to enhance web performance?

HTTP 缓存标头:使用 PHP 增强 Web 性能

对于大量静态内容的网站,实现 HTTP 缓存标头可以显着提高性能。 PHP 提供了几个内置函数来帮助完成此任务。

基本缓存标头

要启用缓存,请考虑使用以下标头:

  1. Cache-Control: 指定缓存策略。对于不应公开缓存的私有内容,请使用 private_no_expire。对于寿命较长的公共内容,请使用 public, max-age=.
  2. Expires: 设置缓存内容的过期日期。对于永不更改的内容,请考虑设置一个较远的日期。
  3. Last-Modified: 表示内容的上次​​修改时间。这允许浏览器确定缓存的内容是否仍然是最新的。
  4. ETag:内容的唯一标识符。如果 ETag 与 If-None-Match 请求标头中的值匹配,则浏览器可以假定内容未更改并提供缓存版本。

处理条件请求

至进一步优化性能,处理条件请求:

<code class="php">$tsstring = gmdate('D, d M Y H:i:s ', $timestamp) . 'GMT';
$etag = $language . $timestamp;

$if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false;
$if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? $_SERVER['HTTP_IF_NONE_MATCH'] : false;
if ((($if_none_match &amp;&amp; $if_none_match == $etag) || (!$if_none_match)) &amp;&amp;
    ($if_modified_since &amp;&amp; $if_modified_since == $tsstring)) {
    header('HTTP/1.1 304 Not Modified');
    exit();
} else {
    header("Last-Modified: $tsstring");
    header("ETag: \"{$etag}\"");
}</code>

如果 If-None-Match 标头与 ETag 匹配,或者 If-Modified-Since 标头与 Last-Modified 日期匹配,则 304 Not Modified 响应为返回,说明缓存内容足够。否则,服务器将返回最新内容。

通过实现这些缓存标头,您可以显着减少 Web 服务器上的负载,并通过更快的页面加载来改善用户体验。

以上是如何在 PHP 中利用 HTTP 缓存标头来增强 Web 性能?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn