必须先启用 mod_headers 模块,否则跨域配置无效;XAMPP 默认未加载,需取消 httpd.conf 中 LoadModule headers_module modules/mod_headers.so 的注释并重启 Apache。

Apache 的 httpd.conf 里没开 mod_headers 模块,跨域配置根本不会生效
XAMPP 默认不启用 mod_headers,而跨域必须靠它设置 Access-Control-Allow-Origin 等响应头。不先加载这个模块,后面加再多配置都白搭。
打开 XAMPP\apache\conf\httpd.conf,搜索 mod_headers,取消这行的注释:
LoadModule headers_module modules/mod_headers.so
改完别忘了重启 Apache。常见错误是改了虚拟主机配置却漏掉这步,浏览器控制台依然报 No 'Access-Control-Allow-Origin' header。
在虚拟主机或目录配置中用 Header set 设置 CORS 响应头
不能只靠 .htaccess —— XAMPP 默认禁止覆盖 Header 指令,直接放根目录的 .htaccess 会报 500 错误。稳妥做法是在 httpd-vhosts.conf 或主配置的 <directory></directory> 块里写:
<Directory "X:/xampp/htdocs/myapp">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
Header set Access-Control-Allow-Origin "*"
Header set Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, DELETE"
Header set Access-Control-Allow-Headers "Content-Type, X-Requested-With, Authorization"
</Directory>
-
Access-Control-Allow-Origin "*"仅适用于开发;生产环境必须指定明确域名,比如"https://myapp.com" - 如果前端发的是带凭证(
credentials: true)的请求,Access-Control-Allow-Origin不能用*,且必须加上Header set Access-Control-Allow-Credentials "true" -
OPTIONS预检请求要能被 Apache 正常响应,确保没被其他重写规则拦截
遇到预检请求(OPTIONS)返回 405 Method Not Allowed 怎么办
这是 Apache 默认拒绝未显式允许的 OPTIONS 方法导致的。不是 CORS 配置错了,而是 HTTP 方法没放开。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
在对应目录配置里加一行:
Require method GET POST HEAD OPTIONS
或者更宽泛一点(开发阶段够用):
Require all granted
注意:如果用了 mod_rewrite,还要检查有没有 RewriteRule 把 OPTIONS 重定向或拒掉了——有些伪静态规则会无差别匹配所有方法。
Chrome 控制台提示 CORS 错误但响应头明明存在?可能是缓存或插件干扰
浏览器对预检请求(OPTIONS)的响应会缓存一段时间(由 Access-Control-Max-Age 决定),改了配置后没立刻生效,很可能是缓存旧响应。
- 临时解决:在 Chrome 开发者工具里勾选
Disable cache(Network 标签页左上角) - 彻底清空:访问
chrome://settings/clearBrowserData,勾选 “Cached images and files” - 某些广告拦截或隐私插件(如 uBlock Origin、Privacy Badger)会主动过滤或篡改响应头,可尝试无痕窗口复现
真正上线时,CORS 不只是加几行 Header set 就完事——要区分哪些接口需要凭据、哪些要暴露特定头字段、是否允许通配符,这些细节一旦和前端请求方式对不上,问题就藏得特别深。

















