AngularJS + Nginx CORS

Posted

技术标签:

【中文标题】AngularJS + Nginx CORS【英文标题】:AngularJS + Ngingx CORS 【发布时间】:2013-01-24 20:25:21 【问题描述】:

我正在尝试进行以下设置:

API

api.domain.com

应用程序

域名.com

我设置了 2 个不同的 nginx 配置,每个 2 个 url 一个。 当在浏览器(api.domain.com/test)中执行常规 GET 请求时,它们都可以工作,但是当从 angularjs(POST)执行 $resource 调用时,它们都崩溃了。这会返回一个

     not allowed by Access-Control-Allow-Origin.

我已经做了一段时间了,一直在玩不同的配置文件。 我目前正在使用以下文件,但我不知道这是否可行。

http://paste.laravel.com/h6U

任何帮助将不胜感激

【问题讨论】:

OPTIONS 调用是否按预期完成(如果您使用 chrome devtools,则返回 200)?如果是并且随后的 POST 失败,则似乎在服务器端缺少一些标头和状态代码... 【参考方案1】:

你可以参考这个post。

我也是 angularjs 的新手。我用 nodejs 编写我的后端代码。当尝试通过angularjs在前端使用后端的api时,我遇到了和你一样的问题。

所以我使用nginx来存储我的应用程序,然后在我的/etc/nginx/conf.d/default.conf文件中我可以用nginx更改路由器,这样可以避免Access-Control-Allow-Origin引起的问题。

希望对你有帮助。

【讨论】:

【参考方案2】:

要在 Angular JS 中使用 CORS,请尝试将此配置添加到应用程序的 Angular 模块中

angular.module('simpleRESTapp')
.config(['$httpProvider', function($httpProvider) 
        $httpProvider.defaults.useXDomain = true;
        delete $httpProvider.defaults.headers.common['X-Requested-With'];
])

对于 Nginx 端,您需要配置 nginx 或您的应用程序服务器以返回一个 Access-Control-Allow-Origin 标头,其中包含客户端发送的 Origin 标头的值(如果它与允许列表匹配)。我想这个配置应该可以工作,

if ($http_origin ~ "^(http://developers.example.com|http://example.com)$") 
    add_header "Access-Control-Allow-Origin" $http_origin;

【讨论】:

【参考方案3】:

我对 angularJs 和 Nginx 有同样的问题 所以我在我的 nginx 配置中添加了以下代码。经过大量搜索后,我发现的重要事情是 [总是] 关键。使用 [always] 键的关键在于,当我使用代码时,我没有得到任何错误状态码,而我只得到 200 和 201,其他状态码会出现跨源错误。

 add_header 'Access-Control-Allow-Origin' http://127.0.0.1 always;
 add_header 'Access-Control-Allow_Credentials' 'true';
 add_header 'Access-Control-Allow-Headers' 'Authorization,Accept,Origin,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Access-Control-Allow-Origin';
 add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT,DELETE,PATCH';

【讨论】:

以上是关于AngularJS + Nginx CORS的主要内容,如果未能解决你的问题,请参考以下文章

Angularjs + Spring-boot + nginx的CORS问题

Laravel + AngularJS Nginx 路由

使用 HTML5Mode 配置多个 AngularJS2 项目的 Nginx 配置

Django REST AngularJS NGINX 配置

ini AngularJS Nginx和html5Mode

ini AngularJS Nginx和html5Mode