由于安全方面的考虑,Javascript被限制了跨域访问的能力,但是有时候我们希望能够做一些合理的跨域访问的事情,那么怎么办呢?
这里分两类情况:一、基于同一父域的子域之间页面的访问;参见如下3个domain域:taobao.com、jipiao.taobao.com、promotion.taobao.com;它们有相同的父域taobao.com。二、基于不同父域页面之间的访问;参见如下3个domain域:taobao.com、baidu.com、sina.com.cn;它们具有不同的父域。
解决它们之间跨域的方案有:
方案1:服务器Proxy
域A的页面JS需要访问域B下的链接获取数据,该方案在域A的服务器端建立一个Proxy程序(可能是ASP、servlet等任何服务端程序),域A的页面JS直接调用本域下的Proxy程序,proxy程序负责将请求发送给域B下的链接并获取到数据,最后再通过Proxy将数据返回给页面JS使用。
经过的访问流程就是: 域A下JS --> 域A 下Proxy -- > 域B下的链接
例子:
第一步:
域A: http://Jipiao.taobao.com/test.htm
页面上javascript脚本:
<script type="text/javascript"><!--
Var sUrl="http://Jipiao.taobao.com/proxy.do"; //本域下代理地址
var callback =
{
success: function(res) { alert(res.responseText); },
failure: function(res) { alert('failure');},
argument:{}
}
YAHOO.util.Connect.asyncRequest('GET', sUrl, callback, null);
// --></script>
第二步:
完成域A服务端的Proxy程序(这里假定是一个servlet),伪码如下:
Public class Proxy extends …….{
..doGet(……..){
HttpClient client=……;
GetMethod get=new GetMethod("www.baidu.com/xxxxx.do");//访问域B的链接
int statusCode = client.executeMethod(get);
if (statusCode != HttpStatus.SC_OK) {
byte[] responseBody = get.getResponseBody();
String res=new String(responseBody);
Httpresponse.getWriter().write(res);//将数据返回给域A
}
}
}
方案2:隐藏iframe、共享domain:
即域A页面http://jipiao.taobao.com/yyyy.htm 的页面上写一个隐藏的iframe:
<html>
<head>
<head>
<body>
<script type="text/javascript" ><!--
Document.domain="taobao.com";
Var remoteHtml=document.getElementById("remoteHtml");
remoteHtml.src="promotion.taobao.com/xxxx.htm";//这里访问域B的链接
var document=remoteHtml.ContentDocument; //这里就可以使用document来操作域B中页面xxx.htm的数据了
// --></script>
<iframe id="remoteHtml" src="" style="diapay:none" style="diapay:none"/>
</body>
</html>
分享到:
相关推荐
本资料包“Tomcat跨域请求资源解决方案.zip”显然是针对这个问题提供了一个具体的解决方案,主要聚焦于如何在Apache Tomcat服务器上配置以允许跨域请求。 Tomcat是Java Servlet容器,广泛用于部署Java Web应用程序...
本文将深入探讨如何解决Ajax跨域请求的问题。 首先,理解“同源策略”是解决问题的关键。同源策略是浏览器为了保障网络安全而设定的一种机制,它禁止了一个源的文档或脚本访问另一个源的属性,这里的“源”指的是...
SpringBoot应用可以通过配置CORS来允许特定或所有来源的跨域请求。在SpringBoot应用中,你可以创建一个配置类,比如`CorsConfig`,并添加一个`CorsFilter`。在`buildConfig`方法中,设置`CorsConfiguration`对象,...
综上所述,解决JS跨域访问IFrame的问题,需要根据实际需求和环境选择合适的解决方案,结合服务器端的支持和客户端的技术手段,确保跨域通信的安全和高效。在开发过程中,应充分理解同源策略的限制,熟练掌握跨域通信...
本文将深入探讨JS跨域的解决方案,帮助开发者理解并解决这个问题。 首先,我们需要了解什么是同源策略。同源策略是浏览器为了保护用户数据安全而实施的一项机制,它限制了来自不同源的脚本之间进行交互。然而,这在...
- `cors-filter-1.7.jar`:这是Apache Shiro的一个扩展,用于处理跨域请求过滤。它提供了实现CORS策略的功能。 - `java-property-utils-1.9.jar`:这是一个Java库,用于处理属性文件和系统属性。在本例中,可能...
本文将深入探讨JavaScript跨域问题的原因、影响以及多种解决方案,帮助开发者理解和解决这个问题。 ### 1. 同源策略 同源策略是浏览器为了安全考虑而实施的一项机制,它规定了只有相同协议(http、https等)、相同...
跨域请求是Web开发中一个常见的挑战,尤其是在使用Ajax进行异步数据交互时。这个问题源自浏览器的同源策略,该策略限制了...如果需要更深入的了解或实践代码示例,可以查看压缩包中的“java跨域请求解决方案”文件。
### JS跨域请求解决方案 #### 一、理解跨域与同源策略 **跨域**在Web开发中指的是从一个域名发起对另一个域名资源的请求。这种请求涉及到多个域名之间的数据交互,通常会受到浏览器安全策略——**同源策略**(Same...
特别是使用file协议访问本地文件时,常见的跨域问题及其解决方案是开发者不得不面对的问题。 首先,同源策略要求“协议+域名+端口”完全一致的请求才被认为是同源。基于这种策略,如果一个文档包含来自不同源的资源...
但在GIS应用中,我们需要跨域请求ArcGIS服务器上的地图服务、图层数据等资源,因此需要找到合法的解决方法。 一种常见的解决策略是使用代理服务器。代理服务器作为中间人,帮助前端应用程序转发请求到ArcGIS服务器...
针对JavaScript跨域,有以下几种常见的解决方法: 1. JSONP(JSON with Padding):JSONP是一种绕过同源策略的方法,它利用`<script>`标签可以跨域加载脚本的特性。通过动态创建`<script>`标签,并设置其`src`属性...
标题《JS跨域访问解决方案总结.pdf》指明文档的核心内容是关于JavaScript跨域访问问题的解决方法。跨域访问问题是指由于浏览器的同源策略限制,网页中JavaScript代码出于安全原因不能访问另一个源(域名、协议或端口...
这个"ajax跨域请求demo.zip"压缩包提供了一个关于如何实现Ajax跨域请求的示例,涉及到前后端的交互。 首先,我们关注"前端代码"部分。前端通常使用JavaScript库如jQuery来实现Ajax请求。jQuery的`$.ajax()`方法是...
"跨域请求解决方案源代码(JSONP, CORS)"这个主题主要关注如何绕过同源策略,实现跨域数据交互。以下是对这两个常见跨域解决方案的详细解释: **JSONP(JSON with Padding)** JSONP是一种早期的跨域数据交互方式...
在没有服务器环境的情况下,这种方法可以实现AJAX读取本地文件,但是请注意,这种解决方案仅限于开发阶段,因为它依赖于浏览器的沙盒环境,且不适用于所有浏览器。在生产环境中,应该使用服务器来托管文件,并通过...
然而,Ajax技术在实现动态网页交互时常常需要跨越这个限制,这时就引入了JSONP(JSON with Padding)作为跨域请求的一种解决方案。本文将详细介绍JSONP的工作原理以及如何在ASP.NET网站开发中应用JSONP解决Ajax跨域...
jcrossdomain是一个专门用于解决JavaScript跨域问题的工具,尤其适用于需要双向通信的场景。它通过创建隐藏的IFrame和利用window.postMessage API来实现跨域通信。window.postMessage是HTML5引入的一个API,允许来自...
总结,JSONP和CORS是解决JavaScript跨域问题的两种主要方法,它们各有优缺点,适用于不同的场景。JSONP简单易用,但安全性较低;CORS则更安全,但需要服务器端的配合。在实际开发中,根据项目需求和浏览器兼容性选择...