本文目录导读:

在 PHP 中,Pragma 是一个 HTTP 头字段,主要用于控制缓存行为,虽然它最初在 HTTP/1.0 中定义,但在 PHP 中仍然可以通过 header() 函数来设置,以下是几种常见的用法:
设置 Pragma 头部
基本语法
header('Pragma: value');
常见值
禁用缓存(最常用)
header('Pragma: no-cache');
设置缓存
header('Pragma: cache');
实际应用示例
完整禁用缓存示例
<?php
// 禁用缓存
header('Pragma: no-cache');
header('Cache-Control: no-cache, must-revalidate');
header('Expires: Thu, 01 Jan 1970 00:00:00 GMT');
echo "This page should not be cached";
?>
控制特定资源的缓存
<?php
// 允许缓存但需要验证
header('Pragma: no-cache');
header('Cache-Control: private, max-age=0, must-revalidate');
// 或者允许缓存
header('Pragma: public');
header('Cache-Control: public, max-age=3600'); // 缓存1小时
?>
与 Cache-Control 的关系
现代浏览器更推荐使用 Cache-Control,Pragma 主要是为了向后兼容 HTTP/1.0:
<?php
header('Pragma: no-cache');
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Expires: 0');
?>
完整示例:动态内容防止缓存
<?php
// 防止浏览器缓存动态生成的页面
function preventCaching() {
header('Pragma: no-cache');
header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Expires: Thu, 01 Jan 1970 00:00:00 GMT');
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT');
}
// 使用
preventCaching();
echo "Dynamic content generated at: " . date('Y-m-d H:i:s');
?>
常见问题解决
多头部设置
// 如果多次调用 header,确保不冲突
header_remove('Pragma'); // 移除已设置的 Pragma
header('Pragma: no-cache');
检查是否已发送头部
if (!headers_sent()) {
header('Pragma: no-cache');
}
现代替代方案
对于现代应用,建议使用:
// 更全面的缓存控制
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache'); // 向后兼容
注意:
Pragma在 HTTP/1.1 中已被Cache-Control替代,但为了兼容性,通常两者都设置- 所有
header()调用必须在任何输出之前执行 - 某些代理服务器和旧浏览器仍然依赖
Pragma头部
这样,你就能在 PHP 中正确使用 Pragma 头部来控制缓存行为了。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播