跨域問題是指瀏覽器為了安全,對不同域(包含不同協議、不同端口或不同主機名)的請求進行限制,從而導致請求無法正常訪問后端接口。
跨域問題的產生源于瀏覽器的同源策略(Same-Origin Policy),這是瀏覽器為保護用戶數據安全而建立的核心安全機制。同源策略規定:只有當兩個資源的協議(protocol)、域名(domain)、端口(port) 完全相同時,才屬于同一來源,否則視為跨域。
-
跨域場景示例:
- 前端運行在
http://localhost:8080
,后端接口在http://api.example.com:8081
(域名、端口不同) - 前端通過
https
訪問,后端接口使用http
協議(協議不同) - 前端部署在
www.example.com
,后端在api.example.com
(子域名不同)
- 前端運行在
-
同源策略的安全意義:防止惡意網站通過腳本獲取其他網站的用戶 Cookie、本地存儲等敏感信息,避免 CSRF(跨站請求偽造)、XSS(跨站腳本攻擊)等安全風險。
@Configuration
public class CorsConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { // 覆蓋所有請求 registry.addMapping("/**") // 允許發送 Cookie .allowCredentials(true) // 放行哪些域名(必須用 patterns,否則 * 會和 allowCredentials 沖突) .allowedOriginPatterns("*") .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") .allowedHeaders("*") .exposedHeaders("*"); }
}