Jsonp跨域

1需要注意的是: 對于當(dāng)前頁面來說頁面存放的 JS 文件的域不重要魄衅,重要的是加載該 JS 頁面所在什么域

題目2: 什么是跨域拟烫?跨域有幾種實現(xiàn)形式

  • 什么是跨域硝清?
    允許不同域的接口進行交互
  • 跨域有幾種實現(xiàn)形式
  1. JSONP
  2. CORS
  3. 降域
  4. postMessage

題目3: JSONP 的原理是什么

1 首先script標(biāo)簽?zāi)乜梢栽L問任何src指向的位置,所以采用這種方式跨域
2 客戶端要對返回的json字符串解析成html字符串顯示,所以服務(wù)端返回的是back(data)這種形式的字符串搂誉,讓客戶端以函數(shù)形式執(zhí)行
3 那么客戶端怎么定義函數(shù),服務(wù)端怎么知道返回什么函數(shù)名呢静檬,就是以加在url后面的callback=函數(shù)名這樣來約定炭懊,服務(wù)端拿到這個參數(shù)就知道了

題目4: CORS是什么

前端用 XMLHttpRequest 跨域訪問時,瀏覽器會在請求頭中添加:origin
后端會添加一個響應(yīng)頭:Access-Control-Allow-Origin
瀏覽器判斷該相應(yīng)頭中Access-Control-Allow-Origin的值是否包含 Origin 的值拂檩,如果有則瀏覽器會處理響應(yīng)侮腹,我們就可以拿到響應(yīng)數(shù)據(jù),如果不包含瀏覽器直接駁回稻励,這時我們無法拿到響應(yīng)數(shù)據(jù)父阻。

題目5:3中跨域方式

  • 1 jsonp
客戶端index.html
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <title>news</title>
  <style>
    .container{
      width: 900px;
      margin: 0 auto;
    }
    ul,
    li {
        padding: 0;
        margin: 0;
        list-style: none;
    }
    body {
        font: 20px/1.5  Helvetica, arial, "Microsoft Yahei", "微軟雅黑", STXihei, "華文細(xì)黑", sans-serif;
        background: #FF9279;
        padding: 50px;
        min-width: 550px;
    }
    .change{
      border: none;
      outline: none;
      margin: 30px;
      padding: 10px 20px;
      border-radius: 10px;
      background: #4A9DBB;
      font: 20px/1.5  "Microsoft Yahei", "微軟雅黑", STXihei, "華文細(xì)黑", sans-serif;
      color: #FFF;
      cursor: pointer;
    }
    .news{
      background: #EF6100;
      padding: 30px 20px;
    }
  </style>
</head>
<body>
    <div class="container">
      <ul class="news">
        <li>第11日前瞻:中國沖擊4金 博爾特再戰(zhàn)</li>
        <li>男雙力爭會師決賽 </li> 
        <li>女排將死磕巴西!</li>
      </ul>
      <button class="change">換一組</button>
    </div>
    
  <script>
    
    $('.change').addEventListener('click', function(){
      var script = document.createElement('script');
      script.src = 'http://b.ji.com:8080/getNews?callback=appendHtml';
      document.head.appendChild(script);
      document.head.removeChild(script);
    })
    function appendHtml(news){
      var html = '';
      for( var i=0; i<news.length; i++){
        html += '<li>' + news[i] + '</li>';
      }
      $('.news').innerHTML = html;
    }
    function $(id){
      return document.querySelector(id);
    }
  </script>
</body>
</html>
服務(wù)端
app.get('/getNews', function(req, res){
    var news = [
        "第11日前瞻:中國沖擊4金 博爾特再戰(zhàn)200米羽球",
        "正直播柴飚/洪煒出戰(zhàn) 男雙力爭會師決賽",
        "女排將死磕巴西钉迷!郎平安排男陪練模仿對方核心",
        "沒有中國選手和巨星的110米欄 我們還看嗎至非?",
        "中英上演奧運金牌大戰(zhàn)",
        "博彩賠率挺中國奪回第二紐約時報:中國因?qū)κ址幎鴣G失的獎牌最多",
        "最“出柜”奧運?同性之愛閃耀里約",
        "下跪拜謝與洪荒之力一樣 都是真情流露"
    ]
    var data = [];
    for(var i=0; i<3; i++){
        var index = parseInt(Math.random()*news.length);
        data.push(news[index]);
        news.splice(index, 1);
    }
    var cb = req.query.callback;
    if(cb){
        res.send(cb + '('+ JSON.stringify(data) + ')');
    }else{
        res.send(data);
    }
    })
  • 2 CORS
1     客戶端
<body>
    <div class="container">
      <ul class="news">
        <li>中英上演奧運金牌大戰(zhàn)</li>
        <li>沒有中國選手和巨星的110米欄 我們還看嗎糠聪? </li> 
        <li>下跪拜謝與洪荒之力一樣 都是真情流露</li>
      </ul>
      <button class="change">換一組</button>
    </div>
    
  <script>
    
    $('.change').addEventListener('click', function(){
      var xhr = new XMLHttpRequest();
      xhr.open('get', 'http://b.ji.com:8080/getNews', true);
      xhr.send();
      xhr.onreadystatechange = function(){
        if(xhr.readyState === 4 && xhr.status === 200){
          appendHtml( JSON.parse(xhr.responseText) )
        }
      }
      window.xhr = xhr
    })
    function appendHtml(news){
      var html = '';
      for( var i=0; i<news.length; i++){
        html += '<li>' + news[i] + '</li>';
      }
      $('.news').innerHTML = html;
    }
    function $(id){
      return document.querySelector(id);
    }
  </script>
</body>
</html>
2     服務(wù)端
app.get('/getNews', function(req, res){
    var news = [
        "第11日前瞻:中國沖擊4金 博爾特再戰(zhàn)200米羽球",
        "正直播柴飚/洪煒出戰(zhàn) 男雙力爭會師決賽",
        "女排將死磕巴西荒椭!郎平安排男陪練模仿對方核心",
        "沒有中國選手和巨星的110米欄 我們還看嗎?",
        "中英上演奧運金牌大戰(zhàn)",
        "博彩賠率挺中國奪回第二紐約時報:中國因?qū)κ址幎鴣G失的獎牌最多",
        "最“出柜”奧運舰蟆?同性之愛閃耀里約",
        "下跪拜謝與洪荒之力一樣 都是真情流露"
    ]
    var data = [];
    for(var i=0; i<3; i++){
        var index = parseInt(Math.random()*news.length);
        data.push(news[index]);
        news.splice(index, 1);
    }
    res.header("Access-Control-Allow-Origin", "http://a.ji.com:8080"); 
    //res.header("Access-Control-Allow-Origin", "*"); 
    res.send(data);
})
  • 3 postmessage
a.html      
<body>
  <div class="ct">
    <h1>使用postMessage實現(xiàn)跨域</h1>
    <div class="main">
      <input type="text" placeholder="http://a.ji.com:8080/a.html">
    </div>
    <iframe src="http://b.ji.com:8080/b.html" frameborder="0" ></iframe>
  </div>
  <script>
  $('.main input').addEventListener('input', function(){
    console.log(this.value);
    window.frames[0].postMessage(this.value,'*');
  })
  window.addEventListener('message',function(e) {
      $('.main input').value = e.data
      console.log(e.data);
  });
  function $(id){
    return document.querySelector(id);
  }
  </script>
</body>
</html>
b.html
<body>
    <input id="input" type="text"  placeholder="http://b.ji.com:8080/b.html">
    <script>
    $('#input').addEventListener('input', function(){
        window.parent.postMessage(this.value, '*');
    })
    window.addEventListener('message',function(e) {
            $('#input').value = e.data
        console.log(e.data);
    });
    function $(id){
        return document.querySelector(id);
    }
    </script>
</body>
</html>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末趣惠,一起剝皮案震驚了整個濱河市狸棍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌味悄,老刑警劉巖草戈,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異侍瑟,居然都是意外死亡唐片,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門涨颜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來费韭,“玉大人,你說我怎么就攤上這事庭瑰⌒浅郑” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵弹灭,是天一觀的道長督暂。 經(jīng)常有香客問我,道長穷吮,這世上最難降的妖魔是什么逻翁? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮捡鱼,結(jié)果婚禮上卢未,老公的妹妹穿的比我還像新娘。我一直安慰自己堰汉,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布伟墙。 她就那樣靜靜地躺著翘鸭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪戳葵。 梳的紋絲不亂的頭發(fā)上就乓,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機與錄音拱烁,去河邊找鬼生蚁。 笑死,一個胖子當(dāng)著我的面吹牛戏自,可吹牛的內(nèi)容都是我干的邦投。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼擅笔,長吁一口氣:“原來是場噩夢啊……” “哼志衣!你這毒婦竟也來了屯援?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤念脯,失蹤者是張志新(化名)和其女友劉穎狞洋,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體绿店,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡吉懊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了假勿。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片借嗽。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖废登,靈堂內(nèi)的尸體忽然破棺而出淹魄,到底是詐尸還是另有隱情,我是刑警寧澤堡距,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布甲锡,位于F島的核電站,受9級特大地震影響羽戒,放射性物質(zhì)發(fā)生泄漏缤沦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一易稠、第九天 我趴在偏房一處隱蔽的房頂上張望缸废。 院中可真熱鬧,春花似錦驶社、人聲如沸企量。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽届巩。三九已至,卻和暖如春份乒,著一層夾襖步出監(jiān)牢的瞬間恕汇,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工或辖, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瘾英,地道東北人。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓颂暇,卻偏偏與公主長得像缺谴,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子耳鸯,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 題目1: 什么是同源策略 瀏覽器出于安全考慮瓣赂,只允許與本域下的接口交互榆骚。不同源的客戶端腳本在沒有明確授權(quán)的情況下,...
    saintkl閱讀 234評論 0 0
  • 1.什么是同源策略 同源策略(Same origin Policy):瀏覽器出于安全方面的考慮煌集,只允許與本域下的接...
    hellowade閱讀 184評論 0 0
  • 題目1: 什么是同源策略 瀏覽器出于安全方面的考慮妓肢,只允許與本域下的接口交互。不同源的客戶端腳本在沒有明確授權(quán)的情...
    GaoYangTongXue丶閱讀 271評論 0 0
  • 同源策略(Same origin Policy) 解析瀏覽器出于安全考慮苫纤,只允許與同域下的接口進行資源交互碉钠。不同域...
    jrg_memo閱讀 257評論 0 0
  • 什么是同源策略 瀏覽器出于安全方面的考慮,只允許與本域下的接口交互卷拘。不同源的客戶端腳本在沒有明確授權(quán)的情況下喊废,不能...
    jamesXiao_閱讀 202評論 0 0