【问题标题】:How to circumvent same-origin policy for a 3rd party https site?如何规避第 3 方 https 站点的同源策略?
【发布时间】:2011-12-02 14:32:45
【问题描述】:

我有一个 http:// 站点,它需要访问在 https:// 站点上公开的第 3 方 JSON API。我已经阅读了Ways to circumvent the same-origin policy,但似乎那里描述的方法不适合我:

  1. document.domain 方法 - 仅适用于子域。
  2. 跨域资源共享方法 - 需要服务器合作。
  3. window.postMessage 方法 - 似乎需要打开一个弹出窗口?
  4. 反向代理方法 - 一种可能的解决方案,但设置起来似乎有点困难。
  5. http://anyorigin.com - 似乎不支持 SSL。

是这个吗?我必须实施似乎相当复杂的解决方案 4,还是我遗漏了什么?

【问题讨论】:

  • 你不能用你自己域上的常规 PHP 页面对其他站点的结果进行 CURL,然后从那个 PHP 页面获取 JSON 吗?
  • JSONP 不会在这里工作吗?
  • 我很确定 anyorigin.com 支持 SSL。例如,尝试获取https://test.kems.net/ - 它工作得很好。
  • 我不是 JSON 专家,但我认为您应该提供更多关于“在 https:// 网站上公开的第三方 JSON API”的信息。它有多灵活?
  • @curiosguy - 这是 API。不是很灵活。 mtgox.com/api/0/data/ticker.php

标签: javascript same-origin-policy


【解决方案1】:

您可以使用 Ajax-cross-origin 一个 jQuery 插件。有了这个插件,你可以使用 jQuery.ajax() 跨域。

使用非常简单:

    $.ajax({
        crossOrigin: true,
        url: url,
        success: function(data) {
            console.log(data);
        }
    });

您可以在这里阅读更多内容:http://www.ajax-cross-origin.com/

【讨论】:

    【解决方案2】:

    抱歉,anyorigin.com 似乎确实支持 https。

    我天真地认为它没有的原因是因为API in question 返回 JSON,我认为我实际上只会得到纯文本响应(就像我在 google.com 上使用 anyorigin.com 的测试一样)。当它只返回一个 object 时,我发现有些东西坏了。

    看来该对象只是返回解析后的 JSON,所以我可以开始了!

    更新 - 在我发布这篇文章几周后,anyorigin.com 停止与一些 https 网站合作,所以我继续写了 whateverorigin.org,这是 anyorigin 的开源替代品。

    【讨论】:

    • @RobW - 请在 github 上打开一个问题。我将在星期五对此进行调查(不能早点承诺)-github.com/ripper234/Whatever-Origin
    • 如果远程服务器根据请求者返回不同的内容,这些方法将不起作用。例如,YouTube 返回一个视频网页,您可以从中提取一个播放 URL,比如说 MP4,如果从调用者使用,而不是从调用者的客户端(当调用者是代理)
    • 我在这里写了这个问题的答案:Loading cross domain html page with jQuery AJAX - 最后一个,支持https
    【解决方案3】:

    JSONP 应该在您的列表中,并且更高。标准差不多。它需要服务器合作,但大多数 API 都应该知道自己在做什么并支持它。

    here 是对其工作原理的真正基本描述

    【讨论】:

      猜你喜欢
      • 2013-09-08
      • 2011-06-20
      • 2013-06-27
      • 2013-11-04
      • 2011-12-26
      • 1970-01-01
      • 2011-10-03
      • 2014-05-29
      相关资源
      最近更新 更多