Js中啟用CORS實現Ajax跨域請求

來源:互聯網
上載者:User

啟用CORS實現Ajax跨域請求
某年某月的一天,需要實現這樣一個需求,在當前網站中用ajax發送一個請求到另一個網站擷取資料,b.com   —>    s.com,剛開始以為沒什麼,不就一條請求嘛,立馬就寫了出來,結果出現一個錯誤200的請求,還有一個提示資訊;
20141020162144
這是什麼情況,於是找度娘問了起來,大概的結果如下(部分文字直接拿過來的):
跨域是我在日常面試中經常會問到的問題,這詞在前端界出現的頻率不低,主要原因還是由於安全限制(同源策略, 即JavaScript或Cookie只能訪問同域下的內容)
CORS的原理:
CORS定義一種跨域訪問的機制,可以讓AJAX實現跨域訪問。CORS 允許一個域上的網路應用向另一個域提交跨域 AJAX 請求。實現此功能非常簡單,只需由伺服器發送一個響應標題即可。
假設我們頁面或者應用已在 http://qq.111cn.net 上了,而我們打算從http://qq.111cn.net 請求提取資料。一般情況下,如果我們直接使用 AJAX 來請求將會失敗,瀏覽器也會返回“源不匹配”的錯誤,”跨域“也就以此由來。
利用 CORS,http://qq.111cn.net 只需添加一個標題,就可以允許來自 http://www.b.com 的請求,下圖是我在PHP中的 hander() 設定,“*”號表示允許任何域向我們的服務端提交請求:
header(“Access-Control-Allow-Origin:*“);
也可以設定指定的網域名稱,如網域名稱 http://www.111cn.net ,那麼就允許來自這個網域名稱的請求:
header(“Access-Control-Allow-Origin:http://www.111cn.net“);
當前我設定的header為“*”,任意一個請求過來之後服務端我們都可以進行處理&響應,那麼在調試工具中可以看到其頭資訊設定,其中見紅框中有一項資訊是“Access-Control-Allow-Origin:* ”,表示我們已經啟用CORS,如下圖。


//相容IE8的javascript
//瀏覽器是否通過XHR支援CORS,合并<strong>XDomainRequest </strong>對象的存在性來支援所有的瀏覽器

 代碼如下 複製代碼
function createCORSRequest(method, url){
    var xhr = new XMLHttpRequest();
    if ("withCredentials" in xhr){
        xhr.open(method, url, true);
    } else if (typeof XDomainRequest != "undefined"){
        xhr = new XDomainRequest();
        xhr.open(method, url);
    } else {
        xhr = null;
    }
    return xhr;
}
var request= createCORSRequest("get", "http://www.111cn.net");
if (request){
    datas.onload = function(){
        //do something with request.responseText,responseText伺服器中返回的資料
    };
    request.send();
}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.