什么是跨域?
跨域,指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器施加的安全限制。
所謂同源是指,域名,協(xié)議,端口均相同,不明白沒(méi)關(guān)系,舉個(gè)栗子:
http://www.mydomain.com/index.html
調(diào)用 http://www.mydomain.com/server.php (非跨域)
http://www.mydomain.com/index.html
調(diào)用 http://www.yourdomain.com/server.php (主域名不同:mydomain/yourdomain,跨域)
http://abc.mydomain.com/index.html
調(diào)用 http://def.mydomain.com/server.php (子域名不同:abc/def,跨域)
http://www.mydomain.com:8080/index.html
調(diào)用 http://www.mydomain.com:8081/server.php (端口不同:8080/8081,跨域)
http://www.mydomain.com/index.html
調(diào)用 https://www.mydomain.com/server.php (協(xié)議不同:http/https,跨域)
請(qǐng)注意:localhost和127.0.0.1雖然都指向本機(jī),但也屬于跨域。
瀏覽器執(zhí)行javascript腳本時(shí),會(huì)檢查這個(gè)腳本屬于哪個(gè)頁(yè)面,如果不是同源頁(yè)面,就不會(huì)被執(zhí)行。
解決辦法:
1、JSONP:
使用方式就不贅述了,但是要注意JSONP只支持GET請(qǐng)求,不支持POST請(qǐng)求。
2、代理:
例如www.mydomain.com/index.html需要調(diào)用www.yourdomain.com/server.php,可以寫一個(gè)接口www.mydomain.com/server.php,由這個(gè)接口在后端去調(diào)用www.yourdomain.com/server.php并拿到返回值,然后再返回給index.html,這就是一個(gè)代理的模式。相當(dāng)于繞過(guò)了瀏覽器端,自然就不存在跨域問(wèn)題。
3、PHP端修改header(XHR2方式)
可以在文件header里設(shè)置ACCESS-CONTROL-ALLOW-ORIGIN,比如:
<?php
header("ACCESS-CONTROL-ALLOW-ORIGIN:http://www.guitoo.cc");
允許guitoo.cc網(wǎng)站來(lái)的請(qǐng)求訪問(wèn)
也可以使用*通配符,來(lái)允許所有的域名訪問(wèn)
header("ALLOW-CONTROL-ALLOW-ORIGIN:*");
在php接口腳本中加入以下兩句即可:
header('Access-Control-Allow-Origin:*');//允許所有來(lái)源訪問(wèn)
header('Access-Control-Allow-Method:POST,GET');//允許訪問(wèn)的方式
4.IIS下配置跨域設(shè)置Access-Control-Allow-Origin
設(shè)置Access-Control-Allow-Origin
打開IIS,找到“HTTP響應(yīng)標(biāo)頭”點(diǎn)進(jìn)去,
在右側(cè)可以看到添加,然后添加如下標(biāo)頭即可
Access-Control-Allow-Headers:Content-Type, api_key, Authorization
Access-Control-Allow-Origin:*
如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答!! 點(diǎn)擊進(jìn)入論壇