jsonp-script標籤的src屬性不受同源策略限制,用此方式對非同源服務器請求資源,返回的JS代碼會調用指定的函數,攜帶的參數就是所需的數據,這樣就完成了跨域請求。javascript
let scriptDom = document.createElement("script");
scriptDom.src="請求地址?callback=函數名";
document.body.appendChild(scriptDom);
複製代碼
CORS -Cross-Origin Resource
Sharing(跨域資源共享)是一種容許當前域(origin)的資源(好比html/js/web service)被其餘域(origin)的腳本請求訪問的機制。當使用XMLHttpRequest發送請求時,瀏覽器若是發現違反了同源策略就會自動加上一個請求頭:origin,後端在接受到請求後肯定響應後會在Response Headers中加入一個屬性:Access-Control-Allow-Origin,值就是發起請求的源地html
》 服務器處理跨域:在先後端分離的項目中能夠藉助服務器實現跨域,具體作法是:前端向本地服務器發送請求,本地服務器代替前端再向api服務器接口發送請求進行服務器間通訊,本地服務器其實就是個中轉站的角色,再將響應的數據返回給前端前端
方便的跨域方案Nginx nginx是一款極其強大的web服務器,其優勢就是輕量級、啓動快、高併發。html5
如今的新項目中nginx幾乎是首選,咱們用node或者java開發的服務一般都須要通過nginx的反向代理。java
反向代理的原理很簡單,即全部客戶端的請求都必須先通過nginx的處理,nginx做爲代理服務器再講請求轉發給node或者java服務,這樣就規避了同源策略。node
html5 提供的 PostMessage(data:須要傳遞的數據,origin: 協議+主機+端口號【+URL】)react
1.頁面和其打開的新窗口的數據傳遞
2.多窗口之間消息傳遞
3.頁面與嵌套的iframe消息傳遞
4.上面三個問題的跨域數據傳遞
複製代碼