XAMPP 默认不发送 Pragma 头,因该头是 HTTP/1.0 请求头,响应中被现代浏览器忽略,且 Apache 2.4+ 已弃用;多端口配置需同步修改 httpd.conf 的 Listen、启用 httpd-vhosts.conf 和正确配置 VirtualHost 块,缺一不可。

直接说结论:XAMPP 默认不发送 Pragma 头,且 Apache 2.4+ 已弃用该头;强行配置不仅无效,还可能干扰缓存行为。多端口配置本身没问题,但和 Pragma 无关。
为什么 XAMPP 不该配 Pragma 头
Pragma 是 HTTP/1.0 的遗留头,仅在请求中(如 Pragma: no-cache)有意义,响应中被现代浏览器忽略。Apache 2.4 起已移除对响应中 Pragma 的支持,即使你用 Header set Pragma 强行注入,curl -I http://localhost:8080 也看不到它,Chrome/Firefox 的 Network 面板里同样不会显示。
真正起作用的是 Cache-Control 和 Expires。比如想禁用缓存,应该配:
Header set Cache-Control "no-store, no-cache, must-revalidate, max-age=0"
而不是折腾 Pragma。
多端口配置的关键三步(缺一不可)
多端口不是“加几个 Listen 就完事”,必须同步对齐三个位置:
-
httpd.conf中添加Listen 8080、Listen 8081(注意不能重复,且避开系统占用端口) -
httpd.conf中确认Include conf/extra/httpd-vhosts.conf这行没被注释(最常见失败原因) -
httpd-vhosts.conf中每个块必须包含ServerName localhost:8080和匹配的DocumentRoot(路径不能以斜杠结尾)
改完必须重启 Apache,否则配置不加载。用 httpd -t 可提前验证语法是否正确。
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、Thin
403 错误和访问不到 localhost 的典型原因
配置多端口后,常出现 403 Forbidden 或 localhost 打不开,多数是权限控制没调好:
- 检查
httpd.conf里段落中的Require all denied—— 它会覆盖所有虚拟主机的Allow from all,得改成Require all granted - 如果只配了
*:8080和*:8081,没配*:80,那么http://localhost就会落到 Apache 默认站点,而默认站点的DocumentRoot可能被锁死或路径不存在 - Windows 下若用非管理员权限启动 XAMPP Control Panel,
Listen某些低端口(如 80)会静默失败,建议统一用 8080+ 端口
别踩的坑:虚拟主机顺序和兜底逻辑
Apache 按 httpd-vhosts.conf 中的顺序匹配 VirtualHost,第一个匹配上的就生效。如果你把 放在最后,而前面有个 (哪怕只是空壳),localhost 就永远进不去你想要的项目。
更隐蔽的问题是:当浏览器发请求时,Host 头为空(比如直接输 http://localhost:8080),Apache 会按端口选第一个匹配的 VirtualHost,而不是按 ServerName。所以 ServerName 在多端口场景下实际意义有限,靠的是端口绑定本身。
复杂点在于:一旦引入域名(如 project.test),就必须同步改 Windows 的 hosts 文件,否则 DNS 解析失败,请求根本到不了 Apache —— 这个环节最容易被忽略,且错误无提示。










