源(origin)就是协议、域名和端口号。
URL由协议、域名、端口和路径组成,如果两个URL的协议、域名和端口全部相同,则表示他们同源。否则,只要协议、域名、端口有任何一个不同,就是跨域。
二、什么是同源策略?
同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
同源策略又分为以下两种:
DOM同源策略:禁止对不同源页面DOM 进行操作。这里主要场景是iframe跨域的情况,不同域名的iframe是限制互相访问的。
XMLHttpRequest同源策略:禁止使用XHR对象向不同源的服务器地址发起HTTP请求。
三、Spring Boot跨域解决方案
本例使用Spring Boot 2.1.6.RELEASE演示,分别用8080和8081端口启动,部分代码如下:
在Spring Boot 2.X应用程序中可以使用注解@CrossOrigin,也可以通过使用WebMvcConfigurer对象来定义全局CORS配置。
- @CrossOrigin注解示例代码
@SpringBootApplication
@RestController
@CrossOrigin
public class VueDomeApplication {
public static void main(String[] args) {
SpringApplication.run(VueDomeApplication.class, args);
}
@GetMapping("login")
public User login() {
User user = new User();
user.setName("bowen");
return user;
}
}
- WebMvcConfigurer对象示例代码
@SpringBootApplication
@RestController
/*@CrossOrigin*/
public class VueDomeApplication {
public static void main(String[] args) {
SpringApplication.run(VueDomeApplication.class, args);
}
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/*")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "DELETE", "PUT","PATCH")
.maxAge(3600);
}
};
}
@GetMapping("login")
public User login() {
User user = new User();
user.setName("bowen");
return user;
}
}