同源政策
您正试图规避“
同源政策”。它内置于每个浏览器中,通常不是您可以或不应该禁用/解决/其他的东西。这是您的站点,用户和用户浏览器之间非常重要的安全合同。
CORS(可能)
CORS允许您的Web服务器告知浏览器/客户端允许访问另一个域。这是通过Web服务器输出以下HTTP标头来完成的
Access-Control-Allow-Origin: http://www.example.com
如果无法控制HTTP标头,则不能使用CORS。这的实现是特定于语言/框架的。
请注意,由于IE8 /
9的支持有限,因此应检查以确保浏览器兼容。另请注意,这是潜在的攻击媒介。如果您不负责任地使用响应数据,它允许来自第三方网站的响应执行XSS攻击。
JSONP(可能)
JSONP是通过动态添加
script标签(
src等于
"yoururl.com?<yourparameter data>"页面)的标签 来动态地在服务器之间传递和获取数据的聪明方法。这是没有Web代理(请参见下文)或applet(Flash /
Java)而实现这一壮举的唯一合法方法。但是,如果您不是请求两端的提供者,则确实存在安全隐患。请记住,JSONP允许远程服务器在您的上下文中执行代码,并且您应该非常谨慎地将权限授予谁。
“香草” AJAX(不可能)
如果您不使用JSONP来获取数据,那么您很可能会尝试使用AJAX请求来获取数据。AJAX请求也要遵循“相同来源策略”。Javascript库(例如jQuery,Prototype,Dojo等)不能规避此策略作为Ajax请求的基本行为。但是,它们可以支持JSONP(现在记住,它不是AJAX)。
带有Web代理的AJAX(可能)
如果确实要从其他服务器请求数据,则可以转发您的请求。您的主站点的服务器将充当代理。您将需要向自己的服务器发出AJAX请求,然后该服务器端代码将向另一个域发出请求,然后通过AJAX调用响应将响应发送到脚本。
这是一种常见的模式,在此将其详细描述为Web代理模式和此处的对价格友好的Yahoo 模式(但请记住,它是特定于Yahoo的,仅需大致理解即可)。但是,它取决于服务器端语言。总体实现是相同的,但是执行此操作的代码将根据您选择的服务器端语言(PHP,Ruby,Python,C等)而有所不同。某些语言已经具有支持这种模式的库/模块/等。
Flash(可能,非默认)
处于默认状态的Flash不支持跨域请求。可以使用跨域策略文件在Flash7
+中将其打开,但强烈建议您不要使用。您的脚本必须与带有Flash API的接口连接,这将发出请求并将数据返回到Javascript。
Java Applet(可能,非默认)
Java也受相同的原始策略的约束,但是与Flash
的发行版中所述的工作类似。
其他各种“骇客”
那里还有其他黑客,但是它们通常需要您控制两端或具有商定的通信标准。例如“ window.name”黑客。我不建议大多数这些方法。
其他解决方案
有人问过类似的另一个问题。它概述了我没有介绍的其他一些方法:规避同源政策的方法
最好的解决方案
- CORS-如果您信任第三者
- 网络代理-如果您不这样做
您自己域上的Web代理可以允许您清理正在检索的数据,它为用户提供了最大的保护。但是,如果您执行零环境卫生措施,那么它不会比这里概述的任何方法更加安全。如果您确实实现某种形式的Web代理,请确保其请求仅限于您想要的站点或来自您希望访问的站点。否则,您实际上将创建一个开放代理,如果发现该代理,用户可能会滥用该代理,从而使您陷入法律麻烦。



