我在MVC4中创建了REST基础webAPI,并托管在服务器上,当我从其他域和本地pc上的超文本标记语言调用它时,我需要将其称为JSONP请求,如put callback=?所以它可以是jsonp。我的问题是,为什么会这样呢?如果这是由于跨域,那么谷歌和facbook以及其他公司如何托管他们的应用程序接口,我们也从我们自己的域调用它,但我们不保留callback=?在他们的url里。
那么为什么我的应用程序接口需要callback=呢?在url中,如果我从其他域调用它,或者在我的本地pc上使用简单的jquery html。
发布于 2012-11-18 06: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将被填充或前缀。
例如,可以创建脚本标记,如下所示
则目标服务器应发送响应,以便
mymethod({normal: 'json response'})
当在客户端(对于任何其他javascript文件)评估此响应时,它将使用来自该服务器的JSON响应有效地调用您的方法。
然而,这只能做GET请求。
如果你想发出POST (PUT/DELETE)请求,你需要使用CORS,在CORS中服务器需要预先设置一个特定的头部。
Access-Control-Allow-Origin: www.ext.site.com
希望这能有所帮助。
发布于 2012-11-18 06:39:57
由于同源策略的限制。同源策略防止从一个域加载的脚本从另一个域获取或操作文档的属性。也就是说,请求的URL的域必须与当前网页的域相同。这基本上意味着浏览器隔离来自不同来源的内容,以防止它们被操纵。
https://stackoverflow.com/questions/13438034
复制相似问题