发送JSON到API的服务器是Gradle包中的Tomcat服务器(它是用Java构建的)。

我在用Angular进行API调用时遇到麻烦。我知道我的API正在工作,因为我可以在“邮递员”上查看它。

 var app = angular.module("todo", []);
 app.controller("AppCtrl", function($http){

 $http.get("192.168.5.100:8080/aggregators/datafile")
    .success(function(data){
        console.log(data)
    })

})


当我运行它时,出现以下错误:

XMLHttpRequest cannot load %3192.168.5.100:8080/aggregators/datafile. Cross origin requests are only supported for HTTP.

最佳答案

您遇到的问题是,如果没有CORS或使用JSONP,就无法从浏览器发出跨源请求。

邮递员在浏览器的上下文之外进行操作(如果您熟悉cURL,就好像您发出了cURL请求一样)。

这是出于安全原因。

那么,如何实现JSONP?它实际上取决于服务器,但是通常,您的资源将查找具有预定querystring参数(为简单起见通常为GET)的callback请求:

http://192.168.5.100:8080/aggregators/datafile?callback=mycallback


您如何拨打JSONP电话?

服务器将JSON包装在该回调中,使其看起来类似于以下内容:

mycallback({json:object});


This Stack Overflow answer goes into more detail

callback是执行请求时浏览器应点击的功能,这就是跨域请求的原因。

现在,进入CORS。

CORS是一个系统,用于允许浏览器与服务器进行通信以确定它是否应该接受跨域请求。这有点复杂,但是总的来说,它涉及在API服务器上设置某些标头。然后以特定方式执行Ajax请求(对于JQuery,对于withCredentials使用$.ajax属性)。服务器检查请求的来源,如果它是有效来源,则让浏览器知道并且浏览器允许该请求(我很简单)。

MDN has a thorough explanation of CORS that is worth reading

10-06 05:09
查看更多