1. 程式人生 > >跨域訪問

跨域訪問

表示 article strong 獲取 app access 不同的 htm -m

當協議、子域名、主域名、端口號中任意一個不相同時,都算不同的域。

不同的域之間相互請求資源,就叫跨域。

處理跨域的方法:

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" );//響應類型

  1. // 響應頭設置
  2. header(‘Access-Control-Allow-Headers:x-requested-with,content-type‘);

部分來自:http://www.jb51.net/article/68424.htm

跨域訪問