兩個完全不同的主域名(非同一主域下的子域),需實現數據共享/單點登錄/跨域請求。
| 方案 | 原理 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|---|
| CORS (Cross-Origin Resource Sharing) | 服務端設置 Access-Control-Allow-Origin: https://www.test2.com、Allow-Credentials: true |
標準、瀏覽器原生支持、支持 Cookie/Session | 需服務端配置、舊瀏覽器不兼容(IE10+) | 現代 Web API 跨域調用、前後端分離 |
| JSONP | 動態插入 <script src="https://test1.com/api?callback=fn">,利用腳本標籤不受同源策略限制 |
兼容極舊瀏覽器(IE6+)、簡單 | 僅支持 GET、無錯誤處理、安全風險(XSS)、不支持 Cookie | 舊項目兼容、公開只讀 API |
| Nginx 反向代理 | 前端頁面通過同域 Nginx 轉發請求到後端不同域服務,proxy_pass 並添加 CORS 頭 |
對前端透明、可統一認證、限流、日誌 | 增加基礎設施複雜度、需運維 | 企業級應用、微服務網關 |
| PostMessage + Iframe | 嵌入對方域 Iframe,雙向 window.postMessage 通信 |
無需後端改造、支持雙向通信 | 需雙方部署頁面、安全驗證 origin、Iframe 限制 | 第三方嵌入、跨域組件通信 |
| 統一認證中心 (SSO/CAS/OAuth2) | 跳轉至統一登錄域,簽發 Token,雙方驗證 Token 獲取用戶信息 | 解決跨域登錄共享、標準協議 | 架構複雜、需維護認證服務 | 多系統單點登錄、開放平台 |
Access-Control-Allow-Credentials: true,前端 withCredentials: true,注意:Allow-Origin 不能為 *,必須指定具體域名。CSDN 詳細教程:Java 跨域數據共享實戰