瀏覽器出於安全和隱私的緣由,對於XMLHttpRequest請求,禁止不一樣域名,不一樣端口,不一樣協議間的腳本相互影響,跨域腳本無效。如上圖(摘自參考1)用戶在瀏覽器瀏覽網站,若是javascript腳本請求了yahoo的接口或者文件,會報相似下圖這樣的錯誤。javascript
同源策略:相同域名,相同端口,協議相同。三者有一個不知足,對於XMLHttpRequest來講,就存在跨域問題。html
參考4,深度好文。慕課也有一篇翻譯的,建議對比着看。前端
1.使用web代理的方式處理(詳情見參考1)。這也是通用處理方式。(能夠配置NGINX服務、或者代碼層次上請求)html5
大體的作法就是在web後端向第三方網站發送http請求,而後「包裝」一下,供前端調用。java
2.Cross-Origin Resource Sharing(CORS)web
經過添加一些特殊的請求頭、響應頭,使web進行跨域通訊ajax
詳情能夠參考5json
Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: true Access-Control-Expose-Headers: FooBar
3.jsonp(JSON with Padding)後端
原理:一種非官方跨域數據交互協議,Web頁面上調用js文件時則不受是否跨域的影響(不只如此,凡是擁有」src」這個屬性的標籤都擁有跨域的能力,好比<script>、<img>、<iframe>。跨域
說明:ajax和jsonp的原理不同!jsonp說白了就是後端動態生成數據(能夠是json,也能夠不是,可是javascript必定要可以解析),前端經過<scirpt>(也能夠是<iframe>或者其餘支持跨域的標籤)標籤請求該數據,從而突破瀏覽器的同源策略的限制。
4.。。。能夠參考6
第一種和第二種爲主流方式,也是我的使用最多的。。(不清楚其餘人。)
偶然發現慕課上有一個課程(參考7),我的還沒看,有空瞄一眼~