Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AngularJS-CORS错误仅适用于HTTP GET_Javascript_Java_Angularjs_Google Chrome_Http - Fatal编程技术网

Javascript AngularJS-CORS错误仅适用于HTTP GET

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'

我正在尝试从AngularJS发出http get请求。它仅在Internet Explorer 11中工作。当我尝试在Chrome、Firefox或Edge中进行POST调用时,它不起作用

我得到以下错误:

这是我的AngularJS呼叫:

 $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");