当前位置:首页 > PHP

php 实现协商缓存

2026-02-16 03:18:45PHP

协商缓存实现原理

协商缓存通过服务器与浏览器之间的HTTP头交互实现,主要依赖Last-Modified/If-Modified-SinceETag/If-None-Match两组头部。当资源未变化时返回304状态码,减少数据传输。

php 实现协商缓存

基于Last-Modified的实现

$filePath = 'path/to/resource.txt';
$lastModified = filemtime($filePath);
$ifModifiedSince = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? 
    strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) : 0;

header("Last-Modified: " . gmdate("D, d M Y H:i:s", $lastModified) . " GMT");

if ($lastModified <= $ifModifiedSince) {
    header("HTTP/1.1 304 Not Modified");
    exit;
}

header("Content-Type: text/plain");
readfile($filePath);

基于ETag的实现

$filePath = 'path/to/resource.txt';
$fileContent = file_get_contents($filePath);
$eTag = md5($fileContent);
$ifNoneMatch = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? 
    trim($_SERVER['HTTP_IF_NONE_MATCH']) : '';

header("ETag: $eTag");

if ($ifNoneMatch === $eTag) {
    header("HTTP/1.1 304 Not Modified");
    exit;
}

header("Content-Type: text/plain");
echo $fileContent;

组合使用两种策略

$filePath = 'path/to/resource.txt';
$lastModified = filemtime($filePath);
$fileContent = file_get_contents($filePath);
$eTag = md5($fileContent);

$ifModifiedSince = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? 
    strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']) : 0;
$ifNoneMatch = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? 
    trim($_SERVER['HTTP_IF_NONE_MATCH']) : '';

header("Last-Modified: " . gmdate("D, d M Y H:i:s", $lastModified) . " GMT");
header("ETag: $eTag");

if (($lastModified <= $ifModifiedSince) || ($ifNoneMatch === $eTag)) {
    header("HTTP/1.1 304 Not Modified");
    exit;
}

header("Content-Type: text/plain");
echo $fileContent;

注意事项

确保在发送304响应前没有输出任何内容 对于动态内容,需要手动计算ETag或Last-Modified值 ETag比Last-Modified更精确,能检测到秒级内的修改 某些CDN会对ETag进行特殊处理,需测试兼容性

标签: 缓存php
分享给朋友:

相关文章

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php记住密码怎么实现

php记住密码怎么实现

使用Cookie实现记住密码功能 在PHP中,可以通过设置Cookie来记住用户的登录状态。以下是一个简单的实现方式: // 用户登录验证成功后 if ($login_success) {…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…

php实现注册

php实现注册

注册功能实现步骤 数据库准备 创建用户表,包含字段如id、username、password、email等。示例SQL: CREATE TABLE users ( id INT AUTO_I…

php 登录实现

php 登录实现

PHP 登录实现 PHP 登录功能通常包括用户认证、会话管理和安全性措施。以下是实现 PHP 登录功能的关键步骤。 数据库准备 创建一个用户表存储用户信息,通常包括用户名、密码(加密存储)和其他必要…

php 实现验证码

php 实现验证码

使用 PHP 生成验证码 验证码(CAPTCHA)用于防止自动化脚本提交表单,以下是几种常见的 PHP 实现方法。 使用 GD 库生成图片验证码 GD 库是 PHP 的图像处理扩展,可用于生成验证码…