跨域问题
一、概念
1、跨域:
是指浏览器对于javascript的同源策略的限制。换句话说这个就是同源策略的保护机制。
例如a.cn下面的js不能调用b.cn中的js对象或数据(因为a.cn和b.cn是不同域),所以跨域就出现了。
2、同源策略:
是指在JS的Ajax请求协议、IP/域名、端口这三项与浏览器上的url地址完全相同,则满足同源策略,既不会出现跨域问题。
列举一些跨域请求,如下:
演示:http://study.cn/json/jsonp/jsonp.html | ||
请求地址 | 形式 | 结果 |
http://study.cn/test/a.html | 同一域名,不同文件夹 | 成功 |
http://study.cn/json/jsonp/jsonp.html | 同一域名,统一文件夹 | 成功 |
http:// |
不同域名,文件路径相同 | 失败 |
http://study.cn |
同一域名,不同端口 | 失败 |
|
同一域名,不同协议 | 失败 |
二、突破跨域限制的解决方案
1、 跨域源资源共享(CORS):
CORS即Cross Origin Resource Sharing(跨域源资源共享),通俗说就是我们所熟知的跨域请求。众所周知,在以前,跨域可以采用代理、JSONP等方式,而在Modern浏览器面前,这些终将成为过去式,因为有了CORS。
CORS在最初接触的时候只大概了解到,通过服务器端设置Access-Control-Allow-Origin响应头,即可使指定来源像访问同源接口一样访问跨域接口,最近在使用CORS的时候,由于需要传输自定义Header信息,发现原来CORS的规范定义远不止这些。
CORS可以分成两种:
1、简单请求
HEAD、GET、POST
这类简单请求,只需要一次请求,后端响应的head部分携带一下信息就可以通过
Access-Control-Allow-Origin:*
Access-Control-Allow-Methods: HEAD,GET,POST
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers:Origin, X-Requested-With, Content-Type, Accept
当你需要访问额外的信息时,就需要在 Access-Control-Expose-Headers 这一项当中填写并以逗号进行分隔。
2、复杂请求
PUT,PATCH, DELETE, OPTIONS等
这类复杂的跨域问题,表面上看起来和简单请求使用上差不多,但实际上浏览器发送了不止一个请求。
1、首先,发送的是一种OPTIONS的"预请求",单服务端返回"预回应"结果为通过(告诉前端我是否允许你跨域访问某资源)
2、 然后,发送最终想要发送的跨域资源请求。
预请求实际上是对服务端的一种权限请求的询问,只有当预请求通过,前端才会实际发送最终的请求。
这类复杂请求,需要最少一次以上的请求,后端响应的head部分携带一下信息才可以通过。
Access-Control-Allow-Origin:*
Access-Control-Allow-Methods: PUT,PATCH,DELETE,OPTIONS
Access-Control-Max-Age: 3600
Access-Control-Expose-Headers:Origin, X-Requested-With, Content-Type, Accept
同理,当你需要访问额外的信息时,也需要在 Access-Control-Expose-Headers 这一项当中填写并以逗号进行分隔。Allow-Method中添加options和Expose-Headers添加Origin,都是为了后端正确响应"预请求"的。所以一定注意不要遗漏了,否则必然导致复杂跨域请求不成功。
三、跨域问题解决方案
Spring MVC 4.2版本后提供了完善的跨域解决方案,具体实体方式如下:
1、application.xml 添加如下配置
<?xml version="1.0" encoding="UTF-8"?> <mvc:annotation-driven /> <mvc:cors> |
2、web.xml 添加如下配置,作用是开启OPTIONS请求,因为默认SpringMVC是关闭了OPTIONS请求的。
<!-- springMvc --> <servlet> <servlet-name>springMvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>dispatchOptionsRequest</param-name> <param-value>true</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springMvc</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> |
相关推荐
要解决跨域问题,Spring提供了CORS(Cross-Origin Resource Sharing)支持。默认情况下,浏览器阻止跨域请求,但我们可以配置Spring MVC来允许特定来源的请求。这通常通过`@CrossOrigin`注解实现,可以应用于...
详解 Spring MVC CORS 跨域 在 Web 开发中,跨域资源共享(Cross-origin resource sharing,CORS)是一个非常重要的概念。它允许 Web 应用程序可以访问不同域名下的资源,而不受同源策略的限制。今天,我们主要介绍...
在Spring MVC中,跨域问题通常发生在Web应用中,当客户端(如JavaScript的Ajax请求)尝试从一个域名访问另一个域名的资源时。由于浏览器的安全策略,这种行为默认是被禁止的,这被称为“同源策略”。然而,在现代Web...
Spring MVC 是一款强大的MVC框架,用于构建企业级的Web应用程序,而Apache Shiro则是一款安全框架,负责处理身份验证、授权(权限控制)、会话管理和安全性相关的其他功能。将两者整合可以实现一个完整的基于角色的...
`AbstractHandlerMapping`、`RequestMappingHandlerMapping`、`CorsInterceptor`、`PreFlightHandler`等:这些类在Spring MVC的请求处理链中起到了关键作用,如读取`@CrossOrigin`注解信息和从XML文件中解析跨域配置...
总的来说,Spring MVC的`@CrossOrigin`注解提供了一种简单而有效的方式来处理跨域问题,使得前端和后端的跨域通信变得更加顺畅。通过合理的配置,开发者可以根据实际需求灵活控制跨域策略,保证了前后端交互的正常...
Spring MVC 与 CORS 跨域的详细介绍 本文对 Spring MVC 与 CORS 跨域的详细介绍,包括 CORS 的知识点和如何在 Spring MVC 中配置 CORS。 CORS 简介 同源策略(same origin policy)是浏览器安全的基石。在同源...
在Spring MVC中,处理文件上传是一项常见的任务,尤其在需要用户交互上传图片或文档的场景下。`multipartResolver`是Spring MVC中处理多部分(multipart)HTTP请求的关键组件,它允许用户上传文件作为请求的一部分。...
4. **Spring MVC 控制器**:创建 Spring MVC 控制器处理前端请求,返回 JSON 数据供 Dojo 控件使用。可以使用 `@ResponseBody` 注解配合 `@RequestMapping` 注解来实现。 5. **数据绑定**:Dojo 控件如 DataGrid ...
Spring MVC的核心组件包括DispatcherServlet、Controller、ModelAndView以及ViewResolver等,它们共同协作,实现了请求的分发、业务逻辑处理及视图呈现。 接下来是AngularJS,这是一个强大的JavaScript框架,用于...
综上所述,实现一个兼容IE6的Spring MVC 3.2框架应用,需要深入理解Spring MVC的特性和机制,同时解决老旧浏览器带来的兼容性问题,以及实施有效的双语切换策略。这需要开发者具备扎实的前端和后端技术基础,以及对...
Spring MVC 是一个基于 Java 的轻量级Web应用框架,它主要负责处理后端的业务逻辑,与前端进行交互。在本教程中,我们将深入探讨如何使用 Spring MVC 进行开发。 1. **Spring MVC 概述** Spring MVC 是 Spring ...
在Spring MVC的Controller或者Controller方法上使用`@CrossOrigin`注解,可以直接指定允许跨域的源、请求方法、请求头等信息。例如: ```java @RestController @CrossOrigin(origins = "http://example.com") ...
Spring实现处理跨域请求代码详解 Spring实现处理跨域请求代码详解是指在Spring框架中如何处理跨域请求,以便让客户端可以跨域访问...我们可以使用CORS协议来解决跨域问题,并使用Spring框架来实现处理跨域请求的功能。
7. **CORS支持** - 对于跨域资源共享(CORS),Spring MVC提供了`CorsRegistry`和`CorsConfiguration`来配置允许哪些来源进行访问。 8. **Validation** - 使用JSR-303/JSR-349提供的注解进行数据验证,例如`@Not...
本文将深入探讨Spring MVC中处理Ajax跨域问题的方法以及需要注意的事项。 **为何出现跨域** 跨域是由浏览器的安全策略——同源策略(Same-origin policy)导致的。它限制了一个源(协议+域名+端口)的文档或脚本...
综上所述,实现AjaxUpload在Spring MVC 4.2中的文件上传涉及前端的Ajax请求、后端的控制器处理、配置文件上传支持、异常处理以及文件存储等多个环节。这个过程需要对Spring MVC和前端交互有深入的理解。希望上述信息...
Spring 4.3 框架中实现跨域 CORS 的方法是一种常用的解决跨域问题的方法。CORS(Cross-Origin Resource Sharing,跨域资源共享)是一种机制,它允许服务器指定可以访问其资源的外域(origin)。在 Spring 4.3 框架中...
确保Spring MVC已经正确配置并能够处理文件上传。这通常涉及到在配置文件中添加相应的bean,例如: ```java @Configuration public class WebConfig extends WebMvcConfigurerAdapter { @Bean public Multipart...
然而,当引入Uploadify时,冲突可能会出现,因为Uploadify使用了其自身的异步上传机制,这可能与Spring MVC的默认处理方式不兼容。解决这个问题的方法是在`Controller`中调整代码,以适应Uploadify的异步请求。 在...