Apache配置CORS需禁用通配符*,改用明确域名(如https://app.example.com),启用mod_headers模块,配合Header set指令设置Access-Control-Allow-Origin、Credentials及Methods,并通过mod_rewrite处理OPTIONS预检请求返回204状态码。

Apache 配置文件中配置 CORS 允许特定域名,核心是禁用通配符 *,改用明确的源(origin),并确保凭据、方法、头等策略与业务一致。直接写死域名更安全,也避免预检失败或浏览器拦截。
确认并启用 mod_headers 模块
这是设置响应头的基础模块,必须启用:
- Ubuntu/Debian 系统:运行
sudo a2enmod headers,再重启 Apache - CentOS/RHEL 系统:检查
/etc/httpd/conf.modules.d/00-base.conf中是否已加载:LoadModule headers_module modules/mod_headers.so
若被注释,取消注释后执行sudo systemctl restart httpd
在虚拟主机或目录块中指定具体域名
不要用 "*",而是填前端真实部署地址(含协议和端口,如需):
使用ydata-profiling(前身为pandas-profiling)生成全面的数据质量报告,包含相关性分析、缺失值模式和基数检测。导出交互式HTML仪表板和JSON摘要。
- 单域名示例(HTTPS 前端):
Header set Access-Control-Allow-Origin "https://app.example.com" - 多域名支持(需配合
mod_rewrite或条件判断):
Apache 本身不原生支持多个静态 origin,但可用以下方式之一实现:
– 若只允许 2~3 个固定域名,可借助SetEnvIf+Header always set动态赋值;
– 更推荐在VirtualHost内用mod_rewrite提取%{HTTP_ORIGIN}并白名单匹配(见下一点)
处理凭据与预检请求(关键细节)
如果前端带 Cookie 或 Authorization 头,必须同时开启凭据支持,且 origin 不能为 *:
- 添加这行:
Header set Access-Control-Allow-Credentials "true" - 预检请求(OPTIONS)必须返回 204 或 200,且响应头需包含完整 CORS 字段:
建议在同作用域内加 rewrite 规则,例如:<IfModule mod_rewrite.c><br> RewriteEngine On<br> RewriteCond %{REQUEST_METHOD} ^OPTIONS$<br> RewriteRule .* - [R=204,L]<br></IfModule> - 确保
Access-Control-Allow-Headers包含前端实际发送的头,比如Authorization, X-Requested-With, Content-Type
验证配置是否生效
修改后务必重启服务,并用 curl 或浏览器开发者工具验证响应头:
- 终端测试命令:
curl -H "Origin: https://app.example.com" -I http://your-api-domain.com/api/test
查看返回中是否有:Access-Control-Allow-Origin: https://app.example.comAccess-Control-Allow-Credentials: true - 若 origin 不匹配(比如发请求时用了
http://而配置是https://),响应头不会出现,说明策略未命中

















