必须先启用mod_headers模块,否则所有CORS配置均无效;需取消httpd.conf中LoadModule headers_module modules/mod_headers.so的注释并彻底重启Apache,再在httpd-vhosts.conf的VirtualHost或Directory块中配置Header指令及Require method OPTIONS等完整规则。

必须先启用 mod_headers 模块,否则任何 CORS 配置都无效 —— 这是 90% 的人卡住的第一步。
为什么改了 httpd.conf 还没用?mod_headers 没启用
XAMPP 默认注释掉了 mod_headers 模块,而 Header set 指令完全依赖它。不启用,Apache 就当那行配置不存在。
- 打开
XAMPP\apache\conf\httpd.conf - 搜索
headers_module,找到这行:LoadModule headers_module modules/mod_headers.so - 删掉前面的
#取消注释 - 重启 Apache(不是重载,是彻底重启)
验证是否生效:访问任意页面后,在响应头里看有没有 Access-Control-Allow-Origin;没有,说明模块仍没加载成功。
如何在 httpd-vhosts.conf 中为指定域名配 CORS 头
别用 .htaccess —— XAMPP 默认禁止 Header 指令覆盖,直接放会触发 500 错误。必须写进虚拟主机或目录块。
立即学习“前端免费学习笔记(深入)”;
- 编辑
XAMPP\apache\conf\extra\httpd-vhosts.conf - 在对应
<virtualhost></virtualhost>或<directory></directory>内添加:
<Directory "X:/xampp/htdocs/myapi">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
Header set Access-Control-Allow-Origin "https://myapp.com"
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS"
Header set Access-Control-Allow-Headers "Content-Type, Authorization"
</Directory>
注意:Access-Control-Allow-Origin 必须写完整协议+域名,不能带路径,也不能用 *(如果前端发的是 credentials: true,* 会被浏览器拒绝)。
OPTIONS 预检请求返回 405 怎么办?Apache 拒绝了该方法
这不是 CORS 配置错,而是 Apache 默认不允许 OPTIONS 方法。浏览器发预检时被直接拦住,根本没走到 Header 设置逻辑。
- 在同一个
<directory></directory>块里加一行:Require method GET POST HEAD OPTIONS - 如果用了
mod_rewrite,检查有没有RewriteRule无差别匹配并拒掉了OPTIONS请求 - 临时调试可先写
Require all granted,确认能通后再收紧权限
Chrome 控制台报 CORS 但 Network 面板看到响应头存在?大概率是缓存或插件干扰,清空缓存、关掉插件再试。
生产环境必须避开的坑
开发时用 * 或 localhost 域名很省事,但上线后这些配置会变成安全漏洞或功能失效点。
-
Access-Control-Allow-Origin必须精确匹配前端域名,比如https://shop.example.com,不能写成https://*.example.com(通配符只支持一级子域且需配合Access-Control-Allow-Credentials false) - 如果前端带 cookie 或 token(即
credentials: true),服务端必须同时设Header set Access-Control-Allow-Credentials "true",且Origin不能为* - 多个前端域名要用代码动态判断
%{HTTP_ORIGIN}并有条件设置头,Apache 原生不支持数组式白名单
最常被忽略的其实是模块加载顺序和重启动作——改完配置不重启 Apache,等于没改;改了 httpd.conf 却漏掉 mod_headers,等于白忙活。


















