我是Apache服务器配置的新手,现在我尝试启用CORS。
使用httpd.conf中的以下设置,CORS可以正常工作。
<VirtualHost *:80>
DocumentRoot /var/www/html/
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
Header always set Access-Control-Allow-Origin "http://example.com"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Allow-Headers: "Content-Type"
</VirtualHost>
但是当前服务器总是将Access-Control-Allow-xxx标头设置为所有即将到来的请求(飞行前OPTIONS请求和实际请求)。
我只想为来自设置源(http://example.com)的Pre-light请求添加Access-Control-Allow-xxx标头,有什么办法可以配置吗?
我已阅读this question和setenvif手册,但我找不到任何可以从请求中提取Origin
信息的选项。
我将非常感谢您提供的任何帮助。
答案 0 :(得分:0)
作为SetEnvIf文档,attribute
语法中的SetEnvIf attribute regex [!]env-variable
可以是An HTTP request header field (see RFC2616 for more information about these); for example: Host, User-Agent, Referer, and Accept-Language.
所以我可以通过以下配置来解决。
<VirtualHost *:80>
DocumentRoot /var/www/html/
SetEnvIf Origin "^http://fiddle.jshell.net$" ORIGIN_COND
Header always set Access-Control-Allow-Origin "http://example.com" env=ORIGIN_COND
...
</VirtualHost>
谢谢@CRroe和@ arco444让我清楚。