代码之家  ›  专栏  ›  技术社区  ›  amwinter

从非安全页安全xmlhttprequest

  •  5
  • amwinter  · 技术社区  · 16 年前

    我想对一个安全的uri进行XMLHttpRequest( https://site.com/ajaxservice/ )从运行在不安全页面中的javascript( http://site.com/page.htm ). 我尝试过各种疯狂的东西,比如iframe和动态脚本元素,到目前为止还没有。我知道我违反了“同一原产地政策”,但一定有办法使这项工作。

    4 回复  |  直到 16 年前
        1
  •  5
  •   Community Mohan Dere    9 年前

    由于 same origin policy ,如你所说。现代浏览器正在实现 CORS (跨来源资源共享)可以用来解决这个问题。但是,这只适用于Internet Explorer 8+、Firefox 3.5+、Safari 4+和Chrome,并且需要一些服务器端工作。您可能需要查看以下文章以进一步阅读此主题:

    JSONP Dan Beam suggested in another answer . 它需要一些额外的JavaScript工作,您可能需要“填充”您的web服务响应,但这是另一个在所有当前浏览器中都适用的选项。

        2
  •  4
  •   Dan Beam    16 年前

    http://www.w3.org/Security/wiki/Same_Origin_Policy#General_Principles .

    你查过JSONP吗( http://en.wikipedia.org/wiki/JSON#JSONP )或是前传( http://nb.io/hacks/csshttprequest )?

    JSONP是一种添加 <script> <脚本> s src 在网上的任何地方)。例子:

    <script>
    
        function globalCallback (a) { /* do stuff with a */ }
    

    然后插入一个 <

        var jsonp = document.createElement('script');
        json.setAttribute('src','http://path.to/my/script');
        document.body.appendChild(jsonp);
    
    </script>
    

    在外部脚本的源代码中,必须调用 globalCallback 函数中包含要传递给它的数据,如下所示:

     globalCallback({"big":{"phat":"object"}});
    

    在脚本执行之后,您将获得所需的数据!

    CSSHttpRequests更像是一个黑客,所以我从来没有必要使用它,不过如果您不喜欢JSONP,可以尝试一下。

        3
  •  2
  •   dlongley    15 年前

    你说过除了用JavaScript编写SSL协议你什么都愿意做。。。但我想你是说如果你必须自己写的话。

    http://github.com/digitalbazaar/forge/blob/master/README

    查看自述文件末尾的博客文章,可以更深入地了解它的工作原理。