在分布式系统中, 大部分在后台做远程调用, 从hession,到dubbo、dubbox , spring cloud 等,所以前台感觉不到跨域问题, 但是有些特殊要求,需要做前端远程调用
从A系统调用B系统页面,在这里不考虑权限问题 ,因为某些系统单点、授权等方式。
调用方式:
1、ajax ,
大部分人用jquery 做为基础框架,那么以jquery 为基础。
直接使用ajax 是不允许跨域 ,报错调用端不允许,那么怎么解决?
首先在调用ajax 增加头部,如下
$.ajax({
url: href,
type: "GET",
dataType:"html",
beforeSend: function (xhr) {
xhr.setRequestHeader("content-type", "web");
xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
},
success: function(data,status){
//On ajax success do this
console.info("load page "+href+" is success.");
renderTable(data);
},
error: function(xhr, ajaxOptions, thrownError) {
//On error do this
console.info("error."+ajaxOptions+",status:"+xhr.status+","+thrownError);
}
});
这样是允许了调用界面能发出ajax请求,那接收端也要增加对应的回应。
一般如果某个系统需要支持跨域 ,只要增加一个过滤器配置即可,过滤器内容如下
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CrossDomainFilter implements Filter {
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain filterChain) throws IOException, ServletException {
// 强制类型转换
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
/*
解决引用出现跨域问题
glyphicons-halflings-regular.woff
glyphicons-halflings-regular.ttf
*/
//跨域设置-start
final String origin = request.getHeader("origin");
if (origin!=null && origin.trim().length()>0) {
response.setHeader("Access-Control-Allow-Origin", origin);
} else {
response.setHeader("Access-Control-Allow-Origin", "*");
}
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "OPTIONS,GET,PUT,POST,DELETE,HEAD");
response.setHeader("Access-Control-Max-Age", "2592000");
response.setHeader("Access-Control-Allow-Headers","content-type,access-control-allow-origin,access-control-request-headers,access-control-request-method,accept,origin,authorization,x-requested-with,serviceName,locale");
//跨域设置-end
//放行、将请求转发到目的地
filterChain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
然后在, web.xml 中增加过滤配置
<!-- 支持跨域 -->
<filter>
<filter-name>crossDomainFilter</filter-name>
<filter-class>org.smartsoft.core.servlet.CrossDomainFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>crossDomainFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
好了,这样就可以A 系统界面访问B系统了。
提示,如果调用的B系统没有支持跨域 ,那么这种方式失效!
2、窗体
无论使用IFrame还是使用 href + target ="_blank" 弹新界面方式,都可以直接调用B界面内容就行了。
所以这是一种很安全的方式,很多插件跨域方式就是使用隐藏的iframe 加载B界面,再用javascript 回写出来。
3、script 方式
网传最著名的 ajax 使用jsonp 方式,就是使用script 方式,原理是动态将要加载界面连接在A界面上写个script 标签,连接为javascript 内容,然后等加script 加载完后,再调用。这种方式适合B界面是纯javascrpt 或json 数据。如果是界面html ,xml 就不适用。
以上是目前用得最多的前端跨域 调用。新的html5 如果是仅仅A,B界面通信 ,那使用postmessage 方式即可。
相关推荐
JavaScript(JS)与Windows Communication Foundation(WCF)服务之间的跨域调用是Web开发中常见的需求,尤其是在构建分布式系统和前后端分离的应用时。本文将详细介绍如何实现JS跨域调用WCF服务,并通过一个控制台...
【大型分布式Web系统的跨域请求方案研究】 随着大数据和互联网技术的快速发展,大型分布式Web系统已经成为常态,这类系统...同时,理解这些跨域请求方案的工作原理和优缺点,对于构建高效、健壮的分布式系统至关重要。
最后,Windows 2000 Server的系统管理工具,如事件查看器、性能监视器和系统日志,为分布式系统的监控和诊断提供了便利,帮助管理员及时发现和解决问题。 综上所述,《Windows 2000 Server资源大全》第五卷详细讲解...
它们涉及到跨域策略、前端与后端通信、分布式系统设计等多个方面,理解并掌握这些知识点对于构建高效、稳定的网络应用至关重要。在实际开发中,应根据项目需求和团队技术栈选择合适的方法和技术。
在分布式系统开发中,Windows Communication Foundation (WCF) 是Microsoft提供的一种强大的服务导向架构,用于构建高度互操作的服务。本实例主要探讨的是如何在Silverlight应用程序中调用WCF服务,以及解决由此产生...
Debbo提供了服务注册与发现、负载均衡、熔断机制、服务调用跟踪等一系列功能,帮助开发者构建高可用、高性能的分布式系统。 在集成Debbo的过程中,以下是一些核心知识点: 1. **服务注册与发现**:Debbo通过...
在当今互联网技术的快速发展下,Web API 成为了构建分布式系统和服务间交互的主要方式之一。开发者们常常需要处理身份验证和跨域资源共享(CORS)的问题。本文将介绍使用 JWT(JSON Web Tokens)在 *** 中实现 Web ...
文章提出了一个面向分布式系统集成的Web服务管理方案,该方案针对当前我国企业普遍面临的分布式应用集成难题,尤其在SQA(软件质量保证)架构下对Web服务资源共享管理和跨域访问安全控制问题提供了有效的解决方案。...
在C# .NET环境下,分布式系统的Remoting技术实现是一个关键的课题,特别是在互联网技术迅猛发展的背景下,传统的集中式计算和客户/服务器模型已无法满足跨平台、跨地域的分布式计算需求。构建一个可扩展、高复用性且...
总的来说,这份资料包提供了一套完整的解决方案,包括理论解释、图形说明和实际配置文件,帮助开发者克服Silverlight和WCF跨域访问的障碍,从而更顺畅地构建分布式系统。通过深入学习和实践这些内容,你可以更好地...
在分布式系统中,尤其是微服务架构中,各个服务可能部署在不同的域名下,这就需要解决跨域请求的问题。Dubbox可以通过配置CORS(Cross-Origin Resource Sharing,跨源资源共享)来允许来自不同源的请求。 CORS的...
然而,在某些场景下,例如前后端分离的架构或者分布式系统中,我们需要打破这一限制,实现跨域通信。本主题将详细探讨如何利用名为“messenger.js”的第三方库来解决这个问题,以及如何在HTML页面中进行嵌套调用。 ...
在IT行业中,Windows Communication Foundation(WCF)是微软提供的一种用于构建分布式系统的服务模型,它允许服务提供商和消费者之间进行安全、可靠的数据交换。当涉及到跨域通信时,通常会遇到浏览器的同源策略...
在分布式系统中,服务是作为独立的、可重用的IT资源提供,它们通过标准化的访问协议进行交互,使得服务请求者无需关心服务提供者的具体实现细节。这种解耦合的设计大大提高了系统的灵活性和可维护性。 常见的分布式...
当前,随着互联网架构的扩张,分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、消息收发、分布式数据库、分布式缓存、分布式对象存储、跨域调用,这些组件共同构成了繁杂的分布式网络。...
然而,这在进行前后端分离、API调用或者分布式系统开发时,可能会造成不便,因为不同的域名或端口被视为不同的源。为了解决这个问题,开发者需要进行跨域配置。本文将详细介绍如何在Apache服务器上配置跨域策略,...
2. **客户端应用程序集成**:各子系统通过API调用方式接入中心认证服务器,实现基于Token的身份验证。 3. **跨域资源共享**:通过配置合适的CORS(Cross-Origin Resource Sharing)策略,允许特定来源的请求访问资源...
然而,为了实现前后端分离或者分布式系统中的数据交互,开发者常常需要突破这一限制。 JSONP是一种规避同源策略的方法,它的工作原理是通过在HTML中动态插入`<script>`标签,其`src`属性指向服务端提供的URL,该URL...
而WCF(Windows Communication Foundation)是微软提供的一种全面的面向服务的通信框架,用于构建分布式系统中的服务。在本案例中,"问题代码 Silverlight调用控制台宿主WCF Demo"涉及的是一个Silverlight客户端尝试...