跨域解釋與解決方案
瀏覽器不能執(zhí)行其他網(wǎng)站的腳本,從一個(gè)域名的網(wǎng)頁(yè)去請(qǐng)求另一個(gè)域名的資源時(shí),域名、端口、協(xié)議任一不同,都是跨域。
跨域是由瀏覽器的同源策略造成的,是瀏覽器施加的安全限制。a頁(yè)面想獲取b頁(yè)面資源,如果a、b頁(yè)面的協(xié)議、域名、端口、子域名不同,所進(jìn)行的訪問行動(dòng)都是跨域的。
跨域中 http https 在同一個(gè)域名不同協(xié)議也是跨域的,www.like.baidu.com 與 www.baidu.com 也是跨域的 ,www.baidu.com 與 www.baidu.com:8080 也是跨域的,這塊大家要注意!
解決途徑:我一般工作中是這三種
1 通過nginx 配置反向代理實(shí)現(xiàn):例如a.com/list.html 要調(diào)用b.com 我們先調(diào)用a.com/server.php, 在通過a.com/server.php 通過后端調(diào)用訪問b.com拿到結(jié)果返回給a.com/list.html。
2 通過代碼設(shè)置header 就是將跨域限制給取消掉,例如php中 header(‘Access-Control-Allow-Origin:*’);//允許所有來源訪問 header(‘Access-Control-Allow-Method:POST,GET’);//允許訪問的方式。
3 nginx中配置header 加入跨域允許也可以。
4 jsonp:只支持 GET,不支持 POST 請(qǐng)求,不安全 XSS ,(JSON with Padding(填充))是 JSON 的一種“使用模式”,本質(zhì)不是 Ajax 請(qǐng)求,是 script 標(biāo)簽請(qǐng)求。 JSONP 請(qǐng)求本質(zhì)上是利用了 “Ajax 請(qǐng)求會(huì)受到同源策略限制,而 script 標(biāo)簽請(qǐng)求不會(huì)” 這一點(diǎn)來繞過同源策略。