跨域訪問
當協議、子域名、主域名、端口號中任意一個不相同時,都算不同的域。
不同的域之間相互請求資源,就叫跨域。
處理跨域的方法:
1 代理:
比如:域名1 要訪問域名2下的資源,可以在域名1的後臺設置代理,直接訪問域名2的服務獲取資源,再給前臺提供接口,域名1就可以
通過這個接口獲取資源了
2 JSONP
假設在http://www.aaa.com/index.php這個頁面中向http://www.bbb.com/getinfo.php提交GET請求,那麽我們在www.aaa.com頁面中添加如下代碼:
var eleScript= document.createElement("script"); //創建一個script元素
eleScript.type = "text/javascript"; //聲明類型、
eleScript.src = "http://www.bbb.com/getinfo.php"; //添加src屬性 引入跨域訪問的url
document.getElementsByTagName("HEAD")[0].appendChild(eleScript); //在頁面中添加新創建的script元素
當GET請求從http://www.bbb.com/getinfo.php返回時,可以返回一段JavaScript代碼,這段代碼會自動執行,可以用來負責調用http://www.aaa.com/index.php頁面中的一個callback函數。看下面一個列子:
在www.aaa.com頁面中:
<script>
function jsonp( json ){
document.write( json.name ); //輸出周星馳
}
<script>
<script src="http://www.bbb.com/getinfo.php"></script>
在www.bbb.com頁面中:
jsonp({ "name":"周星馳","age":45 });
也就是在www.aaa.com頁面中聲明,在www.bbb.com頁面中調用。但是JSONP只支持 “GET” 請求,但不支持 “POST” 請求。
三、處理跨域的方法2 -- XHR2(推薦方法)
“XHR2” 全稱 “XMLHttpRequest Level2” 是HTML5提供的方法,對跨域訪問提供了很好的支持,並且還有一些新的功能。
* IE10一下的版本都不支持
* 只需要在服務器端頭部加上下面兩句代碼:
header( "Access-Control-Allow-Origin:*" );//指定允許其他域名訪問 * 表示允許所有的域名訪問 如果要指定域名,需要把域名寫全,加上http://
header( "Access-Control-Allow-Methods:POST,GET" );//響應類型
- // 響應頭設置
- header(‘Access-Control-Allow-Headers:x-requested-with,content-type‘);
部分來自:http://www.jb51.net/article/68424.htm
跨域訪問