处理Apache中的CORS预检请求

时间:2014-09-07 10:18:05

标签: apache http-headers

我使用Yeoman部署了一个AngularJS应用程序。 Cakephp RESTful后端。

Angular应用程序发送OPTIONS预检请求,后端在nginx中以禁止(403)响应,以解决我使用过的这个问题:

if ($request_method = 'OPTIONS') {
     add_header 'Access-Control-Allow-Origin' '*'; 
     add_header 'Access-Control-Allow-Credentials' 'true';
     add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE'; 
     add_header 'Access-Control-Allow-Headers' 'X-AuthTokenHeader,Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since';   
     add_header 'Access-Control-Max-Age' 1728000;
     add_header 'Content-Type' 'text/plain charset=UTF-8';
     add_header 'Content-Length' 0;
     return 204; 
}

如何在Apache中执行此操作?请提供一些初步指导/意见,我将在此之后详细说明并详细说明问题。

3 个答案:

答案 0 :(得分:8)

我有同样的问题,给出的答案并没有解决问题。

通过查看更多我发现你可以使用重写来做到这一点,例如:

RewriteEngine On                  
RewriteCond %{REQUEST_METHOD} OPTIONS 
RewriteRule ^(.*)$ $1 [R=200,L]    

(确保启用重写模式)

然后你应该使用“always set”设置标题,例如:

Header always set Access-Control-Allow-Origin "*"                   
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS"

此处的解释:to properly use nested controllers

答案 1 :(得分:5)

将此.htaccess文件添加到您的apache根目录:

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

确保激活apache模块标头:

a2enmod headers

来源:https://stackoverflow.com/a/11691776/1494875

答案 2 :(得分:1)

如果有帮助 - 我正在使用身份验证,因此我还必须添加以下内容以使POST请求为我工作:

<LimitExcept OPTIONS>
  Require valid-user 
</LimitExcept>