一、什么是跨域
跨域是指從一個(gè)域名的網(wǎng)頁去請求另一個(gè)域名的資源。比如:A上的頁面獲取B上的資源。
概念:只要協(xié)議、主機(jī)、端口有任何一個(gè)不同,都被當(dāng)作是不同的域。

出于安全考慮,瀏覽器會限制從腳本內(nèi)發(fā)起的跨域HTTP請求。
二、如何實(shí)現(xiàn)跨域訪問
解決方案:
- JSONP
- CORS
- postMessage等
比較常用的是CORS(跨域資源共享)
跨域資源共享( CORS )機(jī)制允許 Web 應(yīng)用服務(wù)器進(jìn)行跨域訪問控制,從而使跨域數(shù)據(jù)傳輸?shù)靡园踩M(jìn)行。瀏覽器支持在 API 容器中(例如 XMLHttpRequest 或 Fetch )使用 CORS,以降低跨域 HTTP 請求所帶來的風(fēng)險(xiǎn)。

服務(wù)器端對于CORS的支持,主要就是通過前后端HTTP HEADER設(shè)置Access-Control-Allow-Origin來進(jìn)行的。如果瀏覽器檢測到相應(yīng)的設(shè)置,就可以允許Ajax進(jìn)行跨域的訪問。
1. 簡單模式(請求方法是 GET / POST / HEAD)
目標(biāo)服務(wù)器在響應(yīng)頭(HTTP HEADER)里添加
Access-Control-Origin:http://xxx.com
瀏覽器就會允許http://xxx.com跨域。如果添加通配符*
Access-Control-Origin:*瀏覽器就會允許所有其他網(wǎng)站跨域。
2. 復(fù)雜模式(請求方法是PUT / DELETE / CONNECT / OPTIONS / TRACE / PATCH)
目標(biāo)服務(wù)器在響應(yīng)頭(HTTP HEADER)里添加
Access-Control-Origin: http://xxx.com
Access-Control-Methods: GET, POST, HEAD, PUT, DELETE, CONNECT, OPTIONS, TRACE, PATCH
瀏覽器會發(fā)兩次請求,第一次是OPTIONS請求,詢問目標(biāo)服務(wù)器是否允許PUT/PATCH...,如果允許則發(fā)真正的請求。