Apache配置CORS需启用mod_headers模块,通过Header指令设置Access-Control-Allow-Origin等响应头,并用Rewrite规则拦截OPTIONS预检请求返回200;生产环境禁止使用*通配符,且启用credentials时必须指定具体域名。

在Apache中配置CORS,核心是通过mod_headers模块向HTTP响应添加标准跨域头。只要后端API由Apache托管或反向代理到后端服务,就能统一控制跨域行为,无需修改业务代码。
启用Headers模块并确认生效
Apache默认可能未启用headers模块,需手动开启:
- 执行命令:
sudo a2enmod headers - 重启Apache:
sudo systemctl restart apache2(Ubuntu/Debian)或sudo apachectl restart(macOS/CentOS) - 验证是否加载成功:
apache2ctl -M | grep headers应输出headers_module (shared)
在虚拟主机或目录配置中添加CORS响应头
在对应站点的<virtualhost></virtualhost>块、<directory></directory>段或.htaccess文件中插入以下指令:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
Header set Access-Control-Allow-Origin "https://your-frontend.com"(生产环境务必指定域名,禁用*) Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS"Header always set Access-Control-Allow-Headers "Content-Type, Authorization, X-Requested-With"-
Header always set Access-Control-Allow-Credentials "true"(如需传递Cookie或Bearer Token) -
Header always set Access-Control-Max-Age "86400"(缓存预检结果1天)
注意:always关键字确保响应头在所有状态码(包括4xx/5xx)下都存在,避免OPTIONS预检失败时漏发头。
正确处理OPTIONS预检请求
浏览器对非简单请求会先发OPTIONS请求。Apache需直接响应,不转发给后端:
- 添加重写规则,拦截并立即返回200:
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
- 配合上面的
Header always set,即可完整支持预检流程 - 若使用
ProxyPass反向代理后端,该规则必须放在ProxyPass之前,否则会被转发走
开发与生产环境的配置差异
开发阶段可简化,但上线前必须收紧:
- 开发环境允许任意源:
Access-Control-Allow-Origin "*"(仅限http://localhost:*等本地调试) - 生产环境必须明确列出可信前端域名,多个用英文逗号分隔:
"https://app.example.com, https://admin.example.com" - 若启用了
Access-Control-Allow-Credentials: true,Access-Control-Allow-Origin不可为*,否则浏览器拒绝请求

















