SpringBoot面试题, Spring Boot 如何处理跨域请求CORS?
SpringBoot面试题, Spring Boot 如何处理跨域请求CORS?
QA
Step 1
Q:: Spring Boot 如何处理跨域请求(CORS)?
A:: 在 Spring Boot 中,可以通过使用 @
CrossOrigin 注解来处理跨域请求。这可以在控制器类或方法上使用,指定允许的域名、方法、头信息等。例如:
@CrossOrigin(origins = "http://example.com")
@GetMapping("/example")
public String example() {
return "example";
}
另外,还可以通过全局配置来处理跨域请求,使用 WebMvcConfigurer 的 addCorsMappings 方法来定义全局的跨域策略:
@Configuration
public class MyConfiguration implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://example.com")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.allowCredentials(true);
}
}
Step 2
Q:: 为什么需要处理跨域请求?
A:: 在 Web 开发中,浏览器出于安全考虑,默认会阻止从一个域名向另一个域名发起的请求(即跨域请求)。这称为同源策略 (Same-Origin Policy)
。但在实际开发中,我们经常需要从不同的域名或端口请求资源,例如在前后端分离的架构中,前端和后端通常运行在不同的域名或端口下。这时候就需要处理跨域请求(CORS),以允许合法的跨域请求。
Step 3
Q:: Spring Boot 如何全局配置 CORS?
A:: 可以通过实现 WebMvcConfigurer 接口并覆盖 addCorsMappings 方法来全局配置 CORS。示例如下:
@Configuration
public class MyCorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://example.com")
.allowedMethods("GET", "POST", "PUT", "DELETE")
.allowedHeaders("*")
.allowCredentials(true);
}
}
这个配置允许来自 http://example.
com 的请求,并允许所有方法(GET、POST、PUT、DELETE),还允许所有的请求头,并且支持凭证(如 cookies)。
Step 4
Q:: CORS 的基本原理是什么?
A:: 跨域资源共享(CORS, Cross-
Origin Resource Sharing)是浏览器的一种机制,通过设置 HTTP 头的方式,允许服务器声明哪些来源是被允许访问资源的。具体来说,浏览器在发起跨域请求时,会首先发出一个预检请求(OPTIONS),服务器返回允许的域、方法和头信息等,浏览器根据服务器返回的信息决定是否继续发送实际请求。