java - 自建API跨域错误

标签 java json angularjs tomcat7 jsonp

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

我在使用 Angular 进行 API 调用时遇到问题。我知道我的 API 正在运行,因为我可以在“Postman”上查看它。

 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,您无法从浏览器发出跨源请求。

Postman 在浏览器上下文之外运行(如果您熟悉 cURL,就好像您发出了 cURL 请求一样)。

这是出于安全原因。

那么,如何实现 JSONP 呢?它确实取决于服务器,但一般来说,您的资源会查找具有预先确定的查询字符串参数的 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 .

回调是浏览器在执行请求时应调用的函数,这就是允许跨域请求的原因。

现在,进入 CORS。

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

MDN has a thorough explanation of CORS that is worth reading .

关于java - 自建API跨域错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23961041/

相关文章:

java - 我的应用程序不断停止。我该如何解决这个问题?

Java比较器和可比较的

javascript - 如何工作 ng-controller 而结果没有显示在浏览器上?

javascript - Angular 错误 : 'argument ' Controller' is not a function, 未定义'

javascript - 无法选择之前选择的选项

java - 管理多个版本的序列化 Java 对象

Java:如何比较两个字符串以获得它们不同的部分?

json - Express API JSON 和 XML POST 请求

json - Avro 不处理循环引用

java - 部署具有 JSON 文件的 Java 项目的正确方法是什么?