from : https://my.oschina.net/tbaby/blog/501333
贴了2篇关于跨域问题,希望看到的朋友好好体会!
之前在开发实验室的一个云服务,主要后端是使用java基于jfinal框架。我们在开发中遇到了一个小小的问题,由于我们开发通常是将前后端分离利用AJAX进行交互的。但是AJAX是不允许跨域的哦,那么问题来了,我们该如何进行跨域AJAX呢?
一、什么是AJAX?
Asynchronous JavaScript and XML (Ajax ) 是驱动新一代 Web 站点(流行术语为 Web 2.0 站点)的关键技术。Ajax 允许在不干扰 Web 应用程序的显示和行为的情况下在后台进行数据检索。使用 XMLHttpRequest
函数获取数据,它是一种 API,允许客户端 JavaScript 通过 HTTP 连接到远程服务器。Ajax 也是许多 mashup 的驱动力,它可将来自多个地方的内容集成为单一 Web 应用程序。
二、为什么会有这个问题?
ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,不允许js代码进行跨域操作,所以会警告。
三、常见解决办法
(1)使用script标签。
script调用没有域的限制,我们可以将输出的数据伪装成script的变量。
(2)服务端脚本中转
服务端脚本使用XMLHTTP没有域的限制,但是耗费服务器的资源。
(3)利用iframe
在同一个域名的各个子域名下,如果设置了document.domain,那么是可以相互调用JS的。
(4)JSONP
这个方法也是最解决正常AJAX和多人使用的。
JSONP(JSON with Padding)是一个非官方的协议,它允许在服务器端集成Script tags返回至客户端,通过javascript callback的形式实现跨域访问(这仅仅是JSONP简单的实现形式)。
首先在客户端注册一个callback, 然后把callback的名字传给服务器。
此时,服务器先生成 json 数据。
然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp.
最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。
客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里.(动态执行回调函数)。
(5)CORS
这也是我们这次采用的解决办法。
CORS-CrossOrigin Resources Sharing,也即跨源资源共享,它定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求。它是一个妥协,有更大的灵活性,但比起简单地允许所有这些的要求来说更加安全。简言之,CORS就是为了让AJAX可以实现可控的跨域访问而生的。
但是CORS也具有一定的风险性,比如请求中只能说明来自于一个特定的域但不能验证是否可信,而且也容易被第三方入侵。
四、在jfinal中使用CORS
在jfinal中使用cors非常简单,这是得益于有cors的支持库。我们也将这个支持库上传到了我们的CDN服务器上。
下载地址:http://cdn.besdlab.cn/cors-lib.rar
(1)在开发项目中加入支持库
(2)修改web.xml,增加以下代码
<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
<init-param>
<param-name>cors.allowOrigin</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.supportedMethods</param-name>
<param-value>GET, POST, HEAD, PUT, DELETE</param-value>
</init-param>
<init-param>
<param-name>cors.supportedHeaders</param-name>
<param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>
</init-param>
<init-param>
<param-name>cors.exposedHeaders</param-name>
<param-value>Set-Cookie</param-value>
</init-param>
<init-param>
<param-name>cors.supportsCredentials</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
注意cors的拦截需要在jfinal之前!
(3)使用例子,我们这里用的是jQuery,其它框架类似。
$("#login").click(function() {
$.ajax("http://测试地址", {
type: "POST",
xhrFields: {
withCredentials: true,
useDefaultXhrHeader: false
},
data: {
username: "测试",
password: "测试"
},
crossDomain: true,
success: function(data, status, xhr) {
}
});
});
五、总结
cors这种解决方案不知道是为什么在国内很少能看到,甚至于百度搜索时都搜不到。我们实验室也在尝试着使用这项技术解决跨域问题,如果大家有什么更好的办法或者是遇到了问题我们可以一起探讨和解决哦!
相关推荐
Java利用cors实现跨域请求实例 跨域请求是指浏览器不能执行其他网站的脚本...cors是一种解决跨域请求的重要方法,通过在Java Tomcat中配置cors filter,可以实现跨域资源共享,并且提高Web应用程序的灵活性和安全性。
Java实现CORS跨域请求的实现方法 本篇文章主要介绍了Java实现CORS跨域请求的实现方法,这是一种常见的解决方案,用于解决前后端分离开发模式下的跨域请求问题。 CORS全名为Cross-Origin Resource Sharing,中文名为...
【标题】"cors跨域Tomcat文件"涉及的是在Web开发中解决跨域问题的一种常见方法,即使用CORS(Cross-Origin Resource Sharing)机制在Apache Tomcat服务器上配置和实现。CORS是一种允许浏览器安全地从不同源加载资源...
Tomcat lib目录下添加cors-filter-1.7.jar,java-property-utils-1.9.jar这两个jar包,项目中web.xml 中添加filter,以及出现OPTIONS 类型的请求并返回403的解决方案;压缩文件包含jar文件,以及web.xml配置。
本文将详细介绍如何使用Java的Filter来实现跨域请求的允许。 ### 概念解析 **同源策略**:同源策略是浏览器的一项安全措施,防止恶意网站读取其他网站的数据,保护用户隐私。如果协议、域名和端口三者都相同,那么...
Spring Boot Web应用开发 CORS 跨域请求支持 CORS(Cross-Origin Resource Sharing,跨域资源共享)是一种机制,它允许Web页面从不同的域名下加载资源,而不受同源策略的限制。 在Spring Boot Web应用开发中,CORS ...
在Java Web应用中,我们可以使用CORS Filter来处理跨域请求。这里提到了两个JAR文件:cors-filter-1.7.1.jar和java-property-utils-1.9.1.jar,它们是实现CORS过滤器的依赖库。`cors-filter-1.7.1.jar`提供了处理...
总的来说,`CORS跨域访问框架jra包`简化了在Java Web应用中实现CORS支持的过程,让开发者能够更便捷地处理跨域请求,提升用户体验,同时确保安全性。对于需要进行跨域操作的Web应用,这是一个非常实用的工具。
在给定的压缩包中,可能包含了客户端和服务端的代码示例,客户端可能是使用JavaScript或jQuery发起跨域请求,服务端则展示了如何配置和处理CORS请求。 6. **安全考虑**:虽然CORS提供了一种安全的跨域访问方式,但...
本文详细介绍了如何在Java Web应用中配置跨域请求支持。通过在`web.xml`文件中定义过滤器,并在`cors.properties`文件中进行细致的配置,可以有效地解决跨域问题。这不仅提高了应用程序的安全性,也增强了其与其他...
"cors跨域问题对应的jar包.zip"这个压缩包文件包含了处理跨域问题所需的两个关键库:`cors-filter-1.7.jar`和`java-property-utils-1.9.1.jar`。`cors-filter`是一个实现了CORS规范的Java过滤器,它允许我们在Tomcat...
总结来说,这个压缩包提供的示例展示了如何使用jQuery的Ajax进行跨域请求,并在Tomcat服务器上的Java Servlet中处理这些请求。这个例子对于理解和解决实际项目中可能出现的跨域问题非常有帮助。开发者需要理解CORS...
综上所述,解决Tomcat跨域请求资源的问题需要理解CORS机制,并结合具体的Web服务器配置进行调整。此压缩包提供的解决方案可能是通过一个预配置的jar包简化这一过程,但具体使用方法需要进一步研究该jar包的文档或...
"CORS"(Cross-Origin Resource Sharing,跨源资源共享)是现代浏览器提供的一种安全机制,用于允许特定的跨域请求。本篇将深入探讨CORS如何帮助我们解决AJAX跨域问题。 首先,我们需要理解为什么会有跨域限制。这...
标题中的"CORS跨域包"指的是在Web开发中用于处理跨域资源共享(CORS)问题的一个工具或库。跨域是浏览器的一种安全策略,限制了JavaScript只能与同一源(协议+域名+端口)的服务器进行通信。然而,有时我们需要在...
Java跨域问题通常出现在Web应用程序中,特别是在前后端分离的架构下。前端(通常是JavaScript)与后端...通过这些技术,Java开发者可以确保其Web服务能够正确处理来自不同源的跨域请求,为前端应用提供灵活的数据接口。
描述中的“java web版 跨域 ajax+jsonp例子源代码.zip”进一步强调这是基于Java Web的示例,用于解决JavaScript通过AJAX进行跨域请求时遇到的问题。AJAX(Asynchronous JavaScript and XML)是一种在不刷新整个页面...
本文将详细介绍如何使用CORS来解决JavaWeb的跨域请求问题。 首先,理解什么是跨域。在Web浏览器的安全策略中,同源策略规定了一个页面只能发起与该页面所在源(协议+主机+端口)相同的HTTP请求,否则会被浏览器阻止...
`cors-filter-1.7.jar` 是一个用于处理跨域请求的过滤器,通常集成在Java Web应用服务器中,如Tomcat、Jetty等。CORS Filter基于Java Servlet规范,可以拦截HTTP请求并添加适当的CORS响应头,允许来自不同源的请求...