Apache如何配置将请求Origin值设为Access-Control-Allow-Origin响应头
Apache 动态返回请求Origin作为跨域允许源配置方案
前置准备
首先需要确保Apache已启用mod_headers模块,该模块负责自定义HTTP响应头:
- Debian/Ubuntu 系发行版:执行命令
a2enmod headers启用模块 - CentOS/RHEL 系发行版:检查
httpd.conf中LoadModule headers_module modules/mod_headers.so配置行,若被注释则删除行首的#
完成模块配置后重启Apache服务生效。
核心配置规则
在httpd.conf(或对应站点的独立配置文件)中添加如下规则即可实现需求:
# 匹配请求携带的Origin头,将值存入临时环境变量 SetEnvIf Origin "^(.*)$" CORS_ORIGIN=$0 # 仅当请求携带Origin头时,动态将响应头的Access-Control-Allow-Origin设置为请求来源值 Header always set Access-Control-Allow-Origin "%{CORS_ORIGIN}e" env=CORS_ORIGIN
可选扩展配置
如果你的跨域请求需要携带凭证(Cookie、Authorization认证头、TLS客户端证书等),必须额外添加如下配置,注意此时不能使用*通配符,动态返回Origin是唯一符合CORS规范的方案:
# 允许跨域请求携带凭证 Header always set Access-Control-Allow-Credentials "true" env=CORS_ORIGIN # 允许的跨域请求方法,可按需调整 Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, PATCH, OPTIONS" env=CORS_ORIGIN # 允许跨域请求携带的自定义头,可按需调整 Header always set Access-Control-Allow-Headers "Content-Type, Authorization, X-Requested-With" env=CORS_ORIGIN
安全提示
上述配置默认允许所有来源跨域访问,和直接配置*的开放范围一致,只是满足了动态返回Origin的格式要求。如果需要限制仅可信来源跨域访问,可修改SetEnvIf的正则规则为白名单匹配,例如仅允许example.com子域和本地调试端口跨域:
SetEnvIf Origin "^https?://(.*\.example\.com|localhost:[0-9]+)$" CORS_ORIGIN=$0
内容的提问来源于stack exchange,提问作者Musmus
相关产品推荐
相关产品推荐

