跨域是瀏覽器的同源策略造成的,瀏覽器為了自身的安全功能,協議、域名、端口有一個不一致,就不允許跨域請求資源
1.前端跨域拿數據方法(具體實現自行搜搜)
https://segmentfault.com/a/1190000020686142?utm_source=tag-newest
(1)document.domain+iframe(主域相同,子域不同)
強制設置document.domain為基礎主域,實現了同域
(2)location.hash+iframe(通過中間頁c來實現,利用iframe的location.hash傳值)
(3)window.name+iframe(通過iframe的src屬性從外域轉向本域,跨域數據就從iframe的外域window.name轉向本地域)
(4)window.postmessage
2.跨域請求
(1)Jsonp(只能get請求)
var script=doucument.createElement(‘script’) script.type=’text/javascript’ script.src=”http://www.domain2.com:8080/login?userName=admin&callback=handleCallback” document.head.appendChild(script) //定義全局的回調函數 function handleCallback(res){ alert(JSON.stringify(res)) }
(2)跨域資源共享CORS
普通請求,前端不需要設置
帶cookie請求,xhr.withCredentials=true
(3)nginx代理跨域(起一個代理服務器)
(4)nodejs中間件代理跨域
node+express+http-proxy-middleware搭建一個proxy服務器
node+webpack+webpack-dev-server設置proxy參數
(5)webSocket協議跨域(HTML5的一種新的協議,實現了瀏覽器與服務器的全雙工通信,socket.io)
3.本地開發跨域怎么解決
(1)webpack-dev-server中設置代理proxy的target和changeOrigoin
(2)express+http-proxy-middleware