【问题标题】:Can I make an XMLHttpRequest to another domain?我可以向另一个域发出 XMLHttpRequest 吗?
【发布时间】:2010-09-24 09:26:03
【问题描述】:

有没有办法将 XMLHttpRequest 与其他域结合使用?

我想在不使用服务器的情况下从 Google 解析一些 xml,因此运行起来非常简单。

var req = getXmlHttpRequestObject();
...
req.open('GET', 'http://www.google.de/ig/api?weather=Braunschweig', true);
        req.setRequestHeader("Content-Type","text/xml");
        req.onreadystatechange = setMessage;
        req.send(null);

在服务器端这样做是没有选择的,至少我不必问

【问题讨论】:

    标签: javascript xml ajax xmlhttprequest


    【解决方案1】:

    不,不是现在。我相信我读到计划/设计正在由标准组织为未来制定,因此我们可以安全地做到这一点。

    否则,跨站点脚本漏洞将十分猖獗。

    JSONP 是一个可能的解决方案,如果其他站点 API 支持的话。

    【讨论】:

      【解决方案2】:

      HTML5 现在支持 XmlHttpRequest 级别 2 的跨域请求,看看:

      http://www.html5rocks.com/en/tutorials/cors/

      【讨论】:

        【解决方案3】:

        这是一个安全问题,大多数(所有?)浏览器都不允许您这样做。您可以使用隐藏的 IFrame 进行提取,但它足够复杂,我只需要使用服务器(或者切换到不同的语言,如果我不必在浏览器中运行)

        【讨论】:

        • 即使使用隐藏的 iframe,您仍然无法获取来自其他域的内容。
        【解决方案4】:

        您不能进行跨域请求,例如由于客户端(浏览器)的安全问题,通过 XMLHttpRequest 或 jQuery(它是 XMLHttpRequest 的包装器)从 example1.com 到 example2.com。这在支持HTML5的现代浏览器中可以通过CORS(跨源资源共享)有效实现,并不是每个客户端浏览器都可以使用。所以解决方法是在example2.com的example1.com中插入script标签,这个解决方案是众所周知的作为 JSON-P(带填充的 JSON),名称可能会产生误导,因为数据可以是服务器提供的任何格式(example2.com)。其实现代码在此链接中给出http://newtechinfo.net/jsonp-for-cross-domain-ajax/

        【讨论】:

          【解决方案5】:

          这是不可能的,因为如今浏览器采用 SOP(同源策略)来限制 XSS 攻击。
          您将不得不使用服务器端脚本(PHP 之类的)。

          【讨论】:

            【解决方案6】:

            可以使用 HTML5 向另一个域发出 XHR。当通过 HTTP 与另一个网站通信时,您也可以使用 XHR 发出不同的协议请求。

            【讨论】:

              【解决方案7】:

              您可以尝试在服务器端做一些事情。因此,在您的应用程序中,您向远程站点发出请求,获取结果并将其返回给您的客户端。然后,AJAX 调用只会调用您自己的服务器并且可以正常工作。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2022-01-26
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2017-05-17
                • 2017-06-13
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多