gpt4 book ai didi

javascript - AngularJS:无法发送带有适当 CORS header 的 POST 请求

转载 作者:数据小太阳 更新时间:2023-10-29 06:06:39 26 4
gpt4 key购买 nike

我正在使用 AngularJS 创建一个网络应用程序。为了测试它,我在 NodeJS 服务器 中运行该应用程序,使用 angular-seed template .

在此应用中,我需要通过 POST 请求向另一台主机发送 JSON 消息,并获得响应,因此,我使用 CORS .

我的请求是通过实现一个使用 AngularJS http service 的服务来完成的(我需要 $http 提供的抽象级别。所以,我不使用 $resource )。

在这里,我的代码。请注意,我修改了 $httpProvider 以告诉 AngularJS 使用适当的 CORS header 发送其请求

angular.module('myapp.services', []).

// Enable AngularJS to send its requests with the appropriate CORS headers
// globally for the whole app:
config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.useXDomain = true;

/**
* Just setting useXDomain to true is not enough. AJAX request are also
* send with the X-Requested-With header, which indicate them as being
* AJAX. Removing the header is necessary, so the server is not
* rejecting the incoming request.
**/
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}
]).

factory('myService', function($http) {
return {
getResponse: function() {
var exampleCommand = JSON.stringify({"foo": "bar"});

// This really doesn't make a difference
/*
var config = {headers: {
'Access-Control-Allow-Origin':'*',
'Access-Control-Allow-Headers': 'Content-Type, Content-Length, Accept',
'Content-Type': 'application/json'
}
};
*/

//return $http.post(REMOTE_HOST, exampleCommand, config).
return $http.post(REMOTE_HOST, exampleCommand).
success(function(data, status, headers, config) {
console.log(data);
return data;
}).
error(function (data, status, headers, config) {
return {'error': status};
});
}
}
});

问题是我无法让它工作。我总是收到此错误消息:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at REMOTE_HOST. This can be fixed by moving the resource to the same domain or enabling CORS.

但是如果我像这样执行一个简单的 jQuery AJAX 调用:

$.ajax(REMOTE_HOST,
{
dataType: "json",
type: "POST",
data: exampleCommand,
success: function(data) { console.log(data); },
error: function(request, textStatus, errorThrown) { console.log("error " + textStatus + ": " + errorThrown);}
});

它工作正常。

所以,我的问题:

- 我如何在 NodeJS 下运行的 AngularJS 中允许跨站点请求?

更新:感谢 Dayan Moreno Leon 的回复。

我的问题是我需要 add cors support to my server .我正在使用 NodeJS http-server用于开发,lighttpd 用于生产。

- 为什么简单的 jQuery POST 请求有效而 AngularJS POST 请求无效?

我猜 jQuery AJAX 请求是 cross-domain默认情况下。还不太确定。

提前致谢

最佳答案

CORS 不在客户端处理,但在服务器中,您需要在 Angular 应用程序尝试 POST 的 nodejs 应用程序上允许 CORS。如果你正在使用 express,你可以尝试使用 cors 模块

https://www.npmjs.org/package/cors

其他需要检查选项方法并返回 200 作为响应的情况

http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

关于javascript - AngularJS:无法发送带有适当 CORS header 的 POST 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24083329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com