我可以向另一个域发出 XMLHttpRequest 吗?
Posted
技术标签:
【中文标题】我可以向另一个域发出 XMLHttpRequest 吗?【英文标题】:Can I make an XMLHttpRequest to another domain? 【发布时间】: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);
在服务器端这样做是没有选择的,至少我不必问
【问题讨论】:
【参考方案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 调用只会调用您自己的服务器并且可以正常工作。
【讨论】:
以上是关于我可以向另一个域发出 XMLHttpRequest 吗?的主要内容,如果未能解决你的问题,请参考以下文章
Javascript XMlHttprequest 到另一个域