久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    淺談跨域的幾種方式

     weiledream 2016-07-27

    跨域,在平常工作中經常遇到,也經常被一些人問到跨域的處理方式。雖然處理跨域的幾種方式都有用過,但是每次提到跨域的時候經常暈乎一下先,所以在這里總結一下平時用過的幾種跨域方式

    1、通過jsonp跨域

    在js中,我們直接用XMLHttpRequest請求不同域上的數據是不可以的,而在html中,能夠實現跨域的就幾種:

    1. link屬性(css)
    2. href屬性(a標簽)
    3. src(img標簽、script標簽)

    為了解決跨域的問題,結合script能夠發起跨域請求的原理,產生了jsonp,即:動態的創建script標簽,跨域的地址加上需要傳送的數據和回調函數為script標簽的src地址,執行完之后再動態的刪除之前創建的script.
    理解了原理之后,就很容易明白jsonp的缺點了:

    1. 只能用get方式請求,因為是使用src來傳送數據
    2. 數據中出現中文需要編碼。因為通過url傳參數,可以在瀏覽器輸入地址并帶上中文參數試試
    3. src對請求的地址沒有限制,會出現安全性的問題

    2、document.domain

    看到這個跨域方式,可能有些同學會覺得陌生,其實這個也很常用。
    每次遇到有需要使用登錄之類的項目,在開發的時候都需要將地址改成163的域名,為啥?在控制臺打印一下document.domain試試,這篇文章的控制臺輸出的是feg.netease.com,而在有使用到163登錄的項目中,輸出的都是163.com。登錄組件限制在163域名下才能用,但是163的域名有很多,避免不同域名之間出現通信問題,使用document.domain的方式將頁面的主域名改成了163.com。這種方式主要用在主域名能設置成相同的頁面之間的通信。如http://xyq.163.com/,它的主域名可以是xyq.163.com或163.com;http://xsd.163.com,它的主域名可以是xsd.163.com或163.com,所以這兩個站點下的頁面能夠將主域名設置成163.com。

    3、window.name的方式

    這種方式利用了window對象name屬性的特征:在一個窗口(window)的生命周期內,窗口載入的所有的頁面都是共享一個window.name的,每個頁面對window.name都有讀寫的權限,window.name是持久存在一個窗口載入過的所有頁面中的,并不會因新頁面的載入而進行重置。
    使用window.name還需要使用iframe來實現,下面是頁面和投票系統使用window.name方式實現的例子(投票地址:http://cgi.mmog.163.com:8088/v4a/show_vote/1250/):
    頁面的js:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var _cdkey = $("#enter-cdkey .code-input").val(),
    _urs = $("#enter-cdkey .mail-input").val(),
    _phone = $("#enter-cdkey .phone-input").val();
     
    var _windowName = _urs + "/" + _cdkey + "/" + _phone;
     
    var _iframe = $("iframe");
    _iframe.attr('src','');
    _iframe.attr('style','display:none');
    _iframe.appendTo('body');
    _iframe[0].contentWindow.name = _windowName;

    投票系統頁面中處理window.name傳過來的數據:

    1
    2
    3
    4
    5
    6
    var _urs = window.name.split('/')[0],
      _cdkey = window.name.split('/')[1],
      _phone = window.name.split('/')[2];
    $('#voterinfo_10').val(_urs);
    $('#voterinfo_70').val(_cdkey);
    $('#voterinfo_41').val(_phone);

    上面只是個簡單的示例,大家有興趣可以去嘗試一下。
    使用window.name方式對數據有一個限制:像上面例子示例的那樣,數據是string。

    4、Access-Control-Allow-Origin方式

    正常情況下我們的接口都是jsonp的格式,可是萬一遇到其它格式的接口怎么辦?比如json格式,這個時候可以通過Access-Control-Allow-Origin來實現跨域。這種方式主要是后臺同學配置,接口使用Access-Control-Allow-Origin設置對應項目的域名,前端同學這邊像平常調用接口一樣,不需要再做其他處理。如下面的例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $.ajax({
        type: "POST",
        data: JSON.stringify(postData),
        dataType: "application/json",
        headers: {"X-Ypw-Token": user_token, "Content-Type": "application/json"},
        success: function(result) {
            renderPage(result);
        }
    });

    data為需要傳輸的數據,dataType是接口的格式。比平常接口調用多了的headers部分,是這個接口考慮到安全性的問題,接口開發同學需要我添加一個key,并且把user_token用base64加密之后傳輸給他,并不是跨域需要設置的東西,即這種方式跟平常調用接口一樣。
    好像這種方式挺好用的。確實,可是最大的問題是ie7、8、9都還不支持,所以目前也就能用在移動端了。

    5、--allow-file-access-from-files --disable-web-security方式

    這種方式是谷歌瀏覽器里面設置的,讓瀏覽器允許跨域,如圖
    6612d581gba6d57e34795&690.png

    除了上面的設置方式之外,還可以通過cmd命令來啟動,像平常用fis啟動項目一樣,先進入谷歌的安裝路徑,然后輸入--allow-file-access-from-files命令來啟動谷歌。之后在谷歌瀏覽器下則不需要考慮接口這些跨域的問題,像4中代碼展示差不多,直接調用接口就可以了。
    這種方式好像也很方便,但實際上平常開發的時候很少用到,因為除了限制在谷歌瀏覽器之外,即使是谷歌用戶都不會去設置這個屬性。我也是因為之前開發手游管理系統的時候用到了,因為最后系統上線的時候,整個系統都在一個服務器上,沒有跨域的問題,但是開發過程中接口都放在各位開發同學的電腦上,開發過程中跨域了,所以使用了這種方式來處理。

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 欧美白妞大战非洲大炮| 国产精品黑色丝袜在线观看| 无码免费大香伊蕉在人线国产| 国产高清自产拍AV在线| 国产成AV人片在线观看天堂无码| 免费看女人与善牲交| 日韩av片无码一区二区不卡| 2020年最新国产精品正在播放| 伊人色综合久久天天小片| 国产第一页浮力影院入口| 久久天天躁狠狠躁夜夜躁2020| 国产成人AV三级在线观看| 毛片大全真人在线| 少妇被黑人到高潮喷出白浆| 久久男人AV资源网站| 国产在线乱子伦一区二区| 精品无码成人片一区二区| 国产成人AV一区二区三区在线| 无码人妻斩一区二区三区| 一本色道久久东京热| 蜜臀AV在线播放一区二区三区| 老司机精品成人无码AV| 日韩有码中文字幕国产| 精品久久久久中文字幕日本| 黑人巨大AV在线播放无码| 免费高清特级毛片A片| 男人猛进出女人下面视频| 国产精品午夜福利视频| 丰满爆乳一区二区三区| 亚洲成AV人片在线观看麦芽| 久久天天躁狠狠躁夜夜AVAPP| 肉感饱满中年熟妇日本| 国产精品福利在线观看无码卡一 | 亚洲精品综合网二三区| 精品乱人伦一区二区三区| 亚洲性色AV一区二区三区| 亚洲AV无码AV在线影院| 亚洲乱亚洲乱少妇无码| 国产微拍精品一区二区| 亚洲精品国产精品乱码视色| 国产精品久久毛片|