为什么JSONP呼叫返回被禁止403然而,URL可以在浏览器中访问

时间:2014-04-11 13:25:21

标签: jsonp

我知道有几个与此相关的问题 - 但我无法找到答案。另外,我想要更多澄清。

我正在本地运行一个rails应用程序,它对一个正在用作API的sinatra应用程序进行jsonp调用。

当我在浏览器中放入此URL时,我最终得到了正确的响应,但是当我使用$ .getJSON通过jQuery进行此调用时,我得到一个禁止的403错误。我知道$ .getJSON正在基于具有callback =的url发出jsonp请求?参数。

我正在试图弄清楚导致403错误的原因。 api应用程序是否有一些拒绝请求的默认配置,因为正在从包含的脚本标记中请求脚本?

现在api请求返回json数据。我认为我有责任查看callback参数并构造一个实际调用回调的响应...

所以如果url是http://myapi.com?callback=blah,那么我应该返回类似的内容:

blah({foo:'bar'})

但我不知道403究竟是什么。如果它是返回的api服务器,那么它试图防范什么?

这是jsonp调用的示例:

$.getJSON( 'http://myapi.com?callback=?', {biz: 'buzz'})

我看到有关为跨域关注点设置标题的帖子 - 但不确定为什么jsonp请求需要这样做。

1 个答案:

答案 0 :(得分:0)

您需要为sinatra api应用程序添加jsonp支持。

以下是向sinatra app添加jsonp支持的一种方法

rack-contrip gem添加到您的Gemfile

gem 'rack-contrib'

将以下内容添加到您的config.ru

require 'rack/contrib'
use Rack::JSONP

重新启动sinatra应用程序并开始从javascript

测试jsop