【转:http://www.cnblogs.com/mafly/p/cors.html】
什么是 CORS ?
跨来源资源共享(Cross-origin resource sharing)是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略,是 JSONP 模式的现代版。与 JSONP 不同,CORS 除了 GET 要求方法以外也支持其他的 HTTP 要求。用 CORS 可以让网页设计师用一般的 XMLHttpRequest,这种方式的错误处理比 JSONP 要来的好。
以上内容摘自维基百科
用人话来解释就是:JavaScript 或 Cookies 不允许访问不同域名下面的内容,当我们想在两个不同域名之前相互通信的话,我们就要考虑跨域这个问题,这也是在通往一个优秀的前端的路上必不可少的过程,如果你只会有 JSONP 的话,那真是令人伤感的,因为 JSONP 是不支持 POST
请求的,所以,在科技发展的今天突然出现了 CORS 这项技术,好像就不需要前端什么事情了,我们可以帮他搞定跨域这个头疼的问题。其实是很简单的一项技术。
怎么使用呢?
据我所知道的是有三种方式:Tomcat 配置、拦截器设置响应头和使用 Spring MVC 4.2+。
设置 Tomcat 这种方式就是引用别人封装好的两个 jar 包,配置一下web.xml
就行了。我也并不推荐,这里放两个我在网上找到的配置相关文章,感兴趣可以看看。
拦截器设置响应头 这种方式原理就是利用拦截器在方法执行前,我们增加请求的响应头,用来支持跨域请求。这种方案是可行的,大部分都是采用这种方案。我当时也是打算采用这种方案,直到我发现原来 Spring 框架已经支持了 CORS 之后,就果断采用了 Spring 框架的内置的方案,其实原理也是一样的。
直接配置即可:
<!-- API 接口跨域配置 -->
<mvc:cors>
<mvc:mapping path="/api/**"
allowed-origins="*"
allowed-methods="POST, GET, OPTIONS, DELETE, PUT"
allowed-headers="Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With"
allow-credentials="true" />
</mvc:cors>
当然你也可以在Controller上使用 @CrossOrigin
注解。类似于这样:
到这里,支持 CORS 跨域请求就配置完成了,这里需要注意的地方是,你的Spring MVC 版本必须是 4.2 及以上。
官方博客:CORS support in Spring Framework
相关推荐
Spring实现处理跨域请求代码详解是指在Spring框架中如何处理跨域请求,以便让客户端可以跨域访问服务器端的资源。本文将详细介绍跨域请求的概念、原因、解决方案,并提供实用的代码示例。 一、什么是跨域请求? ...
5. **数据绑定**:Dojo 控件如 DataGrid 可以通过 JSONP 或 CORS 从 Spring MVC 提供的 RESTful API 获取数据。确保服务器端支持跨域请求,或设置响应头以允许 JSONP 请求。 **四、DataGridTest 示例** 在你提供的...
Spring MVC可以通过配置拦截器(Interceptor)来实现CORS。首先,创建一个继承自`HandlerInterceptorAdapter`的类,如`CrossInterceptor`,并在`preHandle`方法中添加响应头,允许指定来源的请求,允许的HTTP方法,...
在本案例中,可能使用了JSONP(JSON with Padding)来解决跨域问题,因为JSONP是一种在不支持CORS的旧版浏览器中实现跨域请求的常见方法。 JSONP的工作原理是利用`<script>`标签不受同源策略限制的特点,通过动态...
然而,由于浏览器的同源策略限制,XMLHttpRequest在发送请求时,通常只能请求与当前页面同一源的资源,这在进行跨域请求时会遇到“拒绝访问”的错误。为了解决这一问题,我们可以采用多种跨域解决方案,其中一种是...
在Spring MVC或Spring Boot项目中,可以使用`@CrossOrigin`注解或全局配置CORS过滤器来实现跨域支持。 7. **jar包的作用**: 提供的jar包很可能包含了一个处理跨域的Filter,例如实现CORS过滤器。Filter会在HTTP...
总结,Spring MVC提供了多种跨域解决方案,包括JSONP和CORS,开发者可以根据实际需求选择合适的方式。同时,了解并理解跨域的基本概念和浏览器安全策略,对于Web开发者来说至关重要,有助于构建更安全、更灵活的Web...
通过设置CORS(Cross-Origin Resource Sharing)或者使用JSONP(JSON with Padding)等技术,我们可以实现完全跨域,允许来自不同源的请求访问SSO服务,确保用户在任何地方都能享受到统一的登录体验。 6. **单点...
Spring MVC 提供了多种方式来解决跨域问题,包括使用JSONP和CORS(跨域资源共享)等技术。 ##### 1. 使用 JSONP 解决跨域 **JSONP(JSON with Padding)** 是一种被广泛使用的跨域解决方案,其核心思想是在客户端...
4. Filter实现:对于不使用Spring框架或需要更精细控制的场景,可以自定义Filter来处理CORS请求。在Filter中检查请求头,然后动态设置响应头以允许跨域。 5. nginx反向代理:在服务器端,可以使用nginx这样的反向...
2. **CORS(跨源资源共享)的复杂性**:虽然CORS是现代浏览器解决跨域问题的标准方法,但配置起来相对复杂,特别是对于那些不支持CORS的旧版浏览器或者第三方API。 3. **JSONP的局限性**:JSONP只支持GET请求,对于...
这个过滤器通常会在Spring MVC或者类似的Web应用框架中使用,用于处理HTTP请求,添加必要的CORS响应头。源码可能会包含以下几个关键部分: 1. 初始化方法:配置允许的源、HTTP方法、请求头等。 2. `doFilter`方法:...
JSONP是一种跨域数据交互协议,通过动态插入`<script>`标签来实现JavaScript获取非同源服务器的数据。在浏览器的同源策略限制下,JSONP提供了一种绕过这种限制的方式,特别适合于前端与服务端的异步数据交换。 首先...
在Spring MVC中,我们可以通过实现`Filter`接口来自定义一个过滤器,用于处理所有进入服务器的HTTP请求,从而实现跨域访问的支持。 #### 实现Filter的具体步骤 1. **创建Filter类** 首先,我们需要创建一个名为`...
在Spring MVC中,要处理JSONP请求非常简单。我们只需要在控制器(Controller)方法上使用`@ResponseBody`注解,并返回字符串。然后,在Spring的配置文件中,需要配置`MappingJackson2JsonView`,使其支持JSONP。 ...
在服务器端,如Spring MVC框架中,需要配置相应的Controller来处理文件上传的请求。在配置文件中,设置了两种类型的返回结果:一种是成功上传时返回的内容类型,另一种是上传失败时返回的内容类型。Action类中的...
跨域是指在一个网页请求其他域名下资源时发生的事件。当一个请求URL的协议、域名、端口中的任意一项与当前页面URL不同时,就认为是跨域请求。例如,如果当前网页位于`http://example.com:8080`,而尝试加载资源`...
例如,Spring MVC可以通过`@CrossOrigin`注解在控制器方法上启用CORS,或者全局配置`WebMvcConfigurer`接口实现跨域处理。 总的来说,解决JavaWeb中的跨域问题需要对同源策略有深入理解,并结合CORS、JSONP、代理...
然而,为了实现数据交换,开发者可以使用JSONP(JSON with Padding)或者CORS(Cross-Origin Resource Sharing)等方法来跨域请求数据。其中,JSONP是一种利用`<script>`标签可以跨域加载JS片段的特性,将数据封装...
在Spring MVC 4.2以上版本中,可以使用更为简洁的方式,即通过注解来实现CORS配置。Spring提供了一个名为@CrossOrigin的注解,可以用来替代手动设置响应头的复杂性。使用这个注解,可以非常简单地在一个方法或者一个...