首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用自构建API的跨域错误

使用自构建API的跨域错误
EN

Stack Overflow用户
提问于 2014-05-30 18:20:12
回答 1查看 221关注 0票数 0

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

我很难做一个带有角的API调用。我知道我的API正在工作,因为我可以在“邮递员”上查看它。

代码语言:javascript
复制
 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)
    })

})

当我运行它时,我会得到以下错误:

代码语言:javascript
复制
XMLHttpRequest cannot load %3192.168.5.100:8080/aggregators/datafile. Cross origin requests are only supported for HTTP. 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-30 19:03:59

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

Postman在浏览器上下文之外操作(就好像您已经发出了cURL请求,如果您熟悉cURL)。

这是出于安全原因。

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

代码语言:javascript
复制
http://192.168.5.100:8080/aggregators/datafile?callback=mycallback    

如何打JSONP电话?

服务器将JSON封装在回调中,使其看起来如下所示:

代码语言:javascript
复制
mycallback({json:object});

这个堆栈溢出的答案会更详细。

callback是浏览器在执行请求时应该命中的函数,这就是允许跨域请求的原因。

现在,讲到CORS。

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

MDN 对CORS作了详尽的解释,值得一读.

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23961041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档