apache配置cors需同时完成三件事:启用mod_headers模块、在virtualhost或directory中用header always set正确设置响应头、显式处理options预检请求;任一缺失将导致前端卡在预检阶段。

Apache 配置基础 CORS 头,关键不是“加几行 Header”,而是三件事必须同时完成:模块启用、响应头写对位置、OPTIONS 请求能正常返回 200。漏掉任一环节,前端就会卡在预检阶段,报错看起来是跨域失败,实际可能是模块没开或 OPTIONS 被静默拒绝。
确认并启用 mod_headers 模块
Header 指令依赖这个模块,Apache 默认通常不加载它,不启用就等于配置全白写。
PHP中文网提供Apache 2.4.62 官方 tar.gz 源码包下载,通过源码编译安装,开发者能够灵活定制模块、优化性能并精准控制安装路径,满足多样化的业务需求。
- 检查是否已启用:
apache2ctl -M | grep headers(Debian/Ubuntu)或httpd -M | grep headers(RHEL/CentOS),无输出即未启用 - 启用方式:Ubuntu/Debian 执行
sudo a2enmod headers;RHEL/CentOS 或 XAMPP 编辑httpd.conf,取消注释这行:LoadModule headers_module modules/mod_headers.so - 改完必须重启服务:
sudo systemctl restart apache2或sudo apachectl restart
在合适位置添加 CORS 响应头
推荐写在 <virtualhost></virtualhost> 或 <directory></directory> 块里,比 .htaccess 更可靠;用 Header always set 而非 Header set,确保 4xx/5xx 错误响应也带 CORS 头,避免预检失败时漏发。
- 开发环境可临时使用通配符:
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "GET, POST, OPTIONS"
Header always set Access-Control-Allow-Headers "Content-Type, Authorization, X-Requested-With"
Header append Vary Origin
- 生产环境必须替换
"*"为具体前端域名,例如:"https://app.example.com" - 若需支持 Cookie 或 Authorization(即前端设了
credentials: true),必须禁用通配符,并加上:Header always set Access-Control-Allow-Credentials "true"
显式处理 OPTIONS 预检请求
只要前端发了 Authorization、Content-Type: application/json 或任意自定义 Header,浏览器就会先发 OPTIONS 请求。Apache 默认不响应,请求就一直 pending。
- 推荐方案:启用
mod_rewrite,并在同一配置块中添加:
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
- 轻量替代:在
<directory></directory>或<location></location>中加一行:Require all granted,确保 OPTIONS 不被访问控制拦截 - 注意:如果用了
ProxyPass,这条规则必须放在ProxyPass指令之前,否则会被转发给后端










