Javascript AngularJS-CORS错误仅适用于HTTP GET
我正在尝试从AngularJS发出http get请求。它仅在Internet Explorer 11中工作。当我尝试在Chrome、Firefox或Edge中进行POST调用时,它不起作用 我得到以下错误: 这是我的AngularJS呼叫:Javascript AngularJS-CORS错误仅适用于HTTP GET,javascript,java,angularjs,google-chrome,http,Javascript,Java,Angularjs,Google Chrome,Http,我正在尝试从AngularJS发出http get请求。它仅在Internet Explorer 11中工作。当我尝试在Chrome、Firefox或Edge中进行POST调用时,它不起作用 我得到以下错误: 这是我的AngularJS呼叫: $http({ method: 'POST', headers: { 'Content-Type': 'application/json'
$http({
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
url: URL
}).then(function successCallback(response) {
console.log(response.data);
}, function errorCallback(response) {
console.log(response.status);
console.log(response.headers);
console.log(response.config);
});
作为后端,我有一个Java Spring MVC应用程序,并设置了以下标题:
HttpHeaders responseHeader = new HttpHeaders();
responseHeader.set("Access-Control-Allow-Origin","*");
responseHeader.set("Access-Control-Allow-Headers:","Content-Type");
responseHeader.set("Access-Control-Allow-Methods","POST, GET, PUT, OPTIONS, DELETE");
responseHeader.set("Content-Type","application/json");
但是当我设置断点时,我看到angular从未到达后端!这非常令人困惑,我已经在互联网上搜索了很多,并试图更改默认的AngularJS内容类型标题:
$http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8';
我还试图将POST请求中的内容类型更改为“application/x-www-form-urlencoded”——但没有效果
注意:后端和前端在同一台开发人员计算机上运行。唯一的区别是端口,这就是为什么我感到困惑,我得到了一个CORS错误在所有
我只有在POST请求中才有这个问题;把作品弄得神魂颠倒
编辑1:
我认为这是cors的一个问题,我使用不同的端口,但有可能我可以关闭它吗
编辑2:
现在我试着让它和当地的雄猫一起工作。现在我在Tomcat中看到请求将到达服务器:
<< Client IP>> - - [28/Jun/2017:13:43:24 +0200] "OPTIONS <<URL>> HTTP/1.1" 403 -
我已经设置了cors过滤器,如tomcat文档中的示例:
当我发出get请求时,它仍在工作,并且所有CORS头都存在。
我认为第一个选项请求有问题。我不知道为什么tomcat在选项请求到来时不设置CORS头。在Spring控制器中,添加
@CrossOrigin('s)http://localhost:8080)
注释。当然,替换掉angular应用程序的端口。因为您得到了400(未授权)错误,请求没有到达服务本身。最可能的情况是请求域被阻止,您可以查看是否允许XHR请求,并在需要时检查跨源策略。我找到了答案。我创建了一个全新的angularjs测试网站。这是我的工作angularjs代码:
var req = {
method: 'POST',
url: 'myURL',
headers: {
'Content-Type': undefined
},
data: "JSON BODY DATA"
}
$http(req).then(function successCallback(response) {
console.log(response.data);
}, function errorCallback(response) {
console.log(response.data);
});
}]);
我删除了任何更改默认angularjs头的内容。
我的Spring MVC应用程序的标题如下:
Content-Type: text/plain
Content-Length: 0
Date: Wed, 28 Jun 2017 11:43:24 GMT
HttpHeaders responseHeader = new HttpHeaders();
responseHeader.set("Access-Control-Allow-Origin","http://<<clientip>>");
responseHeader.set("Access-Control-Allow-Headers:","Content-Type");
responseHeader.set("Access-Control-Allow-Methods","POST, GET, PUT, OPTIONS, DELETE");
responseHeader.set("Content-Type","application/json");
HttpHeaders responseHeader=newhttpheaders();
set(“访问控制允许来源”,“http://”);
set(“访问控制允许标题:”,“内容类型”);
set(“访问控制允许方法”、“POST、GET、PUT、OPTIONS、DELETE”);
set(“内容类型”、“应用程序/json”);
我不知道它现在起作用的确切原因。可能是因为我修改了AngularJS中的默认标题。这可能与?如果angular正在添加标题,您可能需要在
访问控制允许标题中添加更多内容。检查请求并查看发送的确切标头。如果端口不同,您违反了浏览器同源策略…不同的端口是问题所在?这意味着前端和后端必须在同一端口上运行?
HttpHeaders responseHeader = new HttpHeaders();
responseHeader.set("Access-Control-Allow-Origin","http://<<clientip>>");
responseHeader.set("Access-Control-Allow-Headers:","Content-Type");
responseHeader.set("Access-Control-Allow-Methods","POST, GET, PUT, OPTIONS, DELETE");
responseHeader.set("Content-Type","application/json");