我是否只能在Apache CORS上使用origin url条件设置Access-Control-Allow-xxx标头

时间:2018-03-29 08:18:54

标签: apache cors

我是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 questionsetenvif手册,但我找不到任何可以从请求中提取Origin信息的选项。

我将非常感谢您提供的任何帮助。

1 个答案:

答案 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让我清楚。