首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么我的REST API客户端需要JSONP请求?

为什么我的REST API客户端需要JSONP请求?
EN

Stack Overflow用户
提问于 2012-11-18 14:34:35
回答 2查看 157关注 0票数 0

我在MVC4中创建了REST基础webAPI,并托管在服务器上,当我从其他域和本地pc上的超文本标记语言调用它时,我需要将其称为JSONP请求,如put callback=?所以它可以是jsonp。我的问题是,为什么会这样呢?如果这是由于跨域,那么谷歌和facbook以及其他公司如何托管他们的应用程序接口,我们也从我们自己的域调用它,但我们不保留callback=?在他们的url里。

那么为什么我的应用程序接口需要callback=呢?在url中,如果我从其他域调用它,或者在我的本地pc上使用简单的jquery html。

EN

回答 2

Stack Overflow用户

发布于 2012-11-18 14:41:17

这是因为浏览器强加的同源策略。请参阅http://www.w3.org/Security/wiki/Same_Origin_Policy

http://en.wikipedia.org/wiki/Same_origin_policy

。还要注意,CORS在未来可能是比JSONP更好的选择

http://en.wikipedia.org/wiki/Cross-origin_resource_sharing

编辑:

如果你浏览过上面的链接,你会发现JSONP允许用户绕过浏览器强加的同源策略安全措施。

诀窍是浏览器允许标签引用来源以外的其他域中的文件。

基本上,对于JSONP,您将一个回调函数名发送到服务器,并将其附加到查询字符串中。然后,服务器将使用对此函数的调用来填充或前缀它的JSON请求,因此名称中表示响应的P将被填充或前缀。

例如,可以创建脚本标记,如下所示

则目标服务器应发送响应,以便

代码语言:javascript
代码运行次数:0
运行
复制
mymethod({normal: 'json response'})

当在客户端(对于任何其他javascript文件)评估此响应时,它将使用来自该服务器的JSON响应有效地调用您的方法。

然而,这只能做GET请求。

如果你想发出POST (PUT/DELETE)请求,你需要使用CORS,在CORS中服务器需要预先设置一个特定的头部。

代码语言:javascript
代码运行次数:0
运行
复制
Access-Control-Allow-Origin: www.ext.site.com

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2012-11-18 14:39:57

由于同源策略的限制。同源策略防止从一个域加载的脚本从另一个域获取或操作文档的属性。也就是说,请求的URL的域必须与当前网页的域相同。这基本上意味着浏览器隔离来自不同来源的内容,以防止它们被操纵。

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

https://stackoverflow.com/questions/13438034

复制
相关文章

相似问题

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