例如在 Cloudflare 的页面缓存规则中,设置了 3 天,但是返回的网页 HTTP 头是:
Cloudflare 页面返回
- age 73132
- alt-svc h3=“:443”; ma=86400
- cache-control max-age=7200
- cf-cache-status HIT
- cf-ray a29e93ee2b8ca094-FRA
- content-type text/html; charset=utf-8
- date Wed, 12 Aug 2026 09:50:48 GMT
- expect-ct max-age=86400, enforce
- expires Wed, 17 Aug 2005 00:00:00 GMT
- last-modified Tue, 11 Aug 2026 13:14:29 GMT
- pragma no-cache
pragma no-cache 代表什么
pragma: no-cache 代表这是一个 HTTP/1.0 协议的遗留指令,其作用是要求缓存服务器在返回内容前,必须向源服务器进行验证(即强制回源验证)。
但在当前的场景中,它基本不起作用,可以忽略。因为现代浏览器和 Cloudflare 优先遵循 HTTP/1.1 的 Cache-Control 头。
现代标准以 Cache-Control 为准。如果同时存在,客户端会忽略 Pragma。
3 天 VS 2 小时
cache-control: max-age=7200(源站要求缓存 2 小时)
age: 73132(当前资源已在 Cloudflare 缓存中存了 73132 秒 ≈ 20.3 小时)
age 远大于 max-age,这证明了 Cloudflare 的“边缘缓存 TTL”(设置的 3 天/259200 秒)成功覆盖(覆盖/忽略)了源站的 max-age=7200。缓存规则已经完全生效,Cloudflare 强制将这个页面保留了将近一天,并且还会继续保留到 3 天期满。
Joomla 配置
pragma: no-cache 常由 Joomla 的系统缓存设置产生。关闭它可能从源头解决问题。
- 登录 Joomla 管理员后台。
- 进入 系统 (System) -> 全局配置 (Global Configuration)。
- 点击 系统 (System) 选项卡。
- 将 系统缓存 (System Cache) 设置为 “关闭 - 不缓存” (OFF - Don’t cache)。
- 保存设置并清除 Joomla 缓存。
Joomla 修改源码
如果没有权限修改 Joomla 后台配置,可以在服务器上直接修改源码:
libraries/vendor/joomla/application/src/AbstractWebApplication.php
搜索 no-cache 并注释掉:
if (!$this->allowCache()) {
// Expires in the past.
$this->setHeader('Expires', 'Wed, 17 Aug 2005 00:00:00 GMT', true);
// Always modified.
$this->setHeader('Last-Modified', \gmdate('D, d M Y H:i:s') . ' GMT', true);
$this->setHeader('Cache-Control', 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0', false);
// HTTP 1.0
$this->setHeader('Pragma', 'no-cache');
}
关于作者 🌱
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式