首页 >后端开发 >php教程 >如何在 PHP 中使用 HTTP 缓存标头提高网站性能?

如何在 PHP 中使用 HTTP 缓存标头提高网站性能?

Patricia Arquette
Patricia Arquette原创
2024-11-04 11:13:02557浏览

How to Improve Website Performance with HTTP Cache Headers in PHP?

如何实现HTTP缓存头来优化性能

在动态网页主要由静态内容组成的场景下,使用PHP应用HTTP缓存头可以显着提升网站性能。本指南将深入研究有效缓存的基本标头。

缓存控制指令

cache-control: private, max-age=180 - 设置私有缓存180秒。私有缓存只能由个人用户访问,防止多个客户端之间共享。

cache-control: public, max-age=180 - 设置公共缓存 180 秒。公共缓存可供所有客户端使用,允许共享访问。

HTTP 日期和 ETag 响应标头

上次修改:GMT 日期和时间 - 提供日期和时间内容上次修改的时间,允许浏览器检查更新。

ETag:(唯一标识符) - 生成表示内容的唯一状态的哈希或校验和。浏览器使用 ETag 标头来验证自上次请求以来内容是否已更改。

缓存验证标头

If-Modified-Since:GMT 日期和时间 - 客户端发送资源的最后已知修改日期。如果自该日期以来没有发生任何更改,服务器会响应 304 Not Modified 状态,避免不必要的内容检索。

If-None-Match:(唯一标识符) - 客户端发送资源的最后一个已知 ETag 值。如果 ETag 与服务器的当前值匹配,则会返回 304 Not Modified 状态。

使用 PHP 实现

要在 PHP 中实现这些标头,请考虑以下示例代码:

<code class="php">$tsstring = gmdate('D, d M Y H:i:s ', $timestamp) . 'GMT';
$etag = md5($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 && $if_none_match == $etag) || (!$if_none_match)) &&
    ($if_modified_since && $if_modified_since == $tsstring)) {
    header('HTTP/1.1 304 Not Modified');
    exit();
} else {
    header("Last-Modified: $tsstring");
    header("ETag: \"{$etag}\"");
}</code>

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

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