CORS(Cross-Origin Resource Sharing,跨域资源共享)是一种机制,它使用额外的 HTTP 头来告诉浏览器,让运行在一个源(域)上的 Web 应用被允许访问来自不同源服务器上的指定资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。
当你在浏览器中运行一个 Spring Boot 应用,并且尝试从一个不同的源(例如,另一个域名的 React 应用)访问该应用时,浏览器会因为安全策略阻止这种跨域请求,除非服务器明确允许这种跨域请求。
在 Spring Boot 应用中,你可以通过配置类或直接在控制器上添加注解来允许 CORS。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://example.com") // 允许的源
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 允许的方法
.allowedHeaders("*") // 允许的头
.allowCredentials(true); // 是否发送 cookies
}
}
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class MyController {
@CrossOrigin(origins = "http://example.com")
@GetMapping("/data")
public String getData() {
return "Hello, World!";
}
}
虽然这不是一个长期解决方案,但你可以临时在 Chrome 浏览器中禁用 CORS 安全策略来进行测试。
打开 Chrome 浏览器,并输入以下命令:
chrome.exe --disable-web-security --user-data-dir
请注意,这种方法仅用于开发和测试环境,不应用于生产环境。
CORS 主要用于以下场景:
通过以上配置,你应该能够解决在路由器外部访问时遇到的 Spring React Chrome CORS 错误。
领取专属 10元无门槛券
手把手带您无忧上云