前後端分離如何處理跨域問題
什麼情況下不是跨域?
即:滿足域名、協議、埠均相同的即不是跨域。
例如
http://www.b.com/index.html 呼叫 http://www.b.com/server (非跨域)
http://www.bone.com/index.html 呼叫 http://www.btwo.com/server(主域名不同:one/two,跨域)
http://www.b.com:8080/index.html 呼叫 http://www.b.com:8081/server (埠不同:8080/8081,跨域)
http://www.b.com/index.html 呼叫 https://www.b.com/server (協議不同:http/https,跨域)
解決方案:
1用nginx做web伺服器,將請求轉發,就沒有跨域的問題了
通過反向代理伺服器監聽同埠,同域名的訪問,不同路徑對映到不同的地址,比如,在nginx伺服器中,監聽同一個域 名和埠,不同路徑轉發到客戶端和伺服器,把不同埠和域名的限制通過反向代理,來解決跨域的問題,案例如下:
server {
listen 80;
server_name domain.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location /client { #訪問客戶端路徑
proxy_pass http://localhost:81;
proxy_redirect default;
}
location /apis { #訪問伺服器路徑
rewrite ^/apis/(.*)$ /$1 break;
proxy_pass http://localhost:82;
}
}
2 CORS在後端設定響應頭,把你需要執行訪問的域名加入加入Access-Control-Allow-Origin中。
Cross-Origin Resource Sharing (CORS) 是W3c工作草案,它定義了在跨域訪問資源時瀏覽器和伺服器之間如何通訊。CORS背後的基本思想是使用自定義的HTTP頭部允許瀏覽器和伺服器相互瞭解對方,從而決定請求或響應成功與否。
x詳細https://blog.csdn.net/liboyang71/article/details/77867239
3jsonp把後端根據請求,構造json資料,並返回,前端用jsonp跨域。