【问题标题】:403 Forbidden on JSONP request403 禁止 JSONP 请求
【发布时间】:2012-02-03 16:41:06
【问题描述】:

有一个我无法控制的域返回 JSON 数据——转到 http://services.example.com/search?store=ITUNES&q=twitter 会产生类似

{
  MySearch: {
    resultCount: 1
    results: [
      { name: "twitter" }
    ]
  }
}

当我尝试使用 jsonp 从另一个域获取它时,例如从我自己的计算机(使用 jQuery)--

$.ajax({
    url: 'http://services.example.com/search?store=ITUNES&q=twitter',
    dataType: 'jsonp',
    success: function(data) {
        console.log('hi');
    }
});

我得到“状态代码:403 禁止”。

这是服务器响应标头:

Connection:keep-alive
Content-Length:9
Content-Type:text/plain
Date:Thu, 05 Jan 2012 20:33:04 GMT
Server:WEBrick/1.3.1 (Ruby/1.9.3/2011-10-30)
X-Frame-Options:sameorigin

有什么方法可以在不进行任何服务器端更改的情况下获取这些数据?

【问题讨论】:

  • 参数中需要回调函数名。能发一下具体的网址吗?
  • JSONP 设置需要服务器端的配合。看来服务器不使用JSONP

标签: javascript ajax json jsonp


【解决方案1】:

试试下面的 sn-p。请记住,整个响应将作为对象存储在控制台中,您可以简单地使用 data[i] 等引用每个键值对。

var jServices = jQuery.noConflict();
jServices.ajaxSetup({
    contentType: "application/jsonp; charset=UTF-8"
});
jServices.getJSON("http://services.joppio.com/services/search?session=AF8990-34GDC-03345&store=ITUNES&pos=0&cnt=10&q=twitter", function (data) {
    console.log(data);
});

希望它能解决你的问题。

【讨论】:

    【解决方案2】:

    这是由于浏览器的cross origin resource sharing policy.

    要启用此功能,您必须让源添加特殊标头以“预检”您的请求。否则,JSONP tactic 将允许您跨域访问数据,但它实际上必须是 JSONP 而不仅仅是 JSON。

    以下是如何在 PHP 中启用跨域资源共享的示例:

    <?php
          header('Access-Control-Allow-Origin: http://sub.domain.com');
          header('Access-Control-Allow-Credentials: true' );
    ?>
    

    正如你所说,很遗憾,我认为这超出了你的控制范围。事实上,安全机制已经到位,部分原因是为了防止此类事情发生(即通过使用 JSON 来消耗其他服务器的资源)。

    【讨论】:

    • api.jquery.com/jQuery.getJSON - 脚本和 JSONP 请求不受同源策略限制。
    • 请重新阅读他的意图。数据似乎不是 JSONP 或脚本,因此无法使用这些方法。
    • 有什么方法可以在不进行任何服务器端更改的情况下获取这些数据? - 他这样说。另外,JSONP NOT 绑定到相同的源策略。在他用真实的 URL 编辑之前,我们无法确定到底出了什么问题。这是example.com他正在放置。
    • 很遗憾,我认为这是你无法控制的 - 我说过
    • 很确定它不是 JSONP。
    猜你喜欢
    • 2016-08-17
    • 1970-01-01
    • 2014-10-31
    • 2016-11-24
    • 1970-01-01
    • 2022-01-18
    • 2010-09-27
    • 2019-01-26
    相关资源
    最近更新 更多