jsonp系列(二)jsonp的原理與實現(xiàn)方式

在介紹jsonp之前灼卢,先來聊一聊瀏覽器的同源策略绍哎。

關(guān)于同源策略的由來

1995年,同源策略被引入到瀏覽器中鞋真,其目的是為了保護用戶的數(shù)據(jù)安全崇堰。

同源策略主要做了以下幾點的限制:

(1) 非同源站點上的Cookie、LocalStorage 和 IndexDB 無法讀取涩咖。

(2) 非同源站點上面的DOM節(jié)點 無法獲得海诲。

(3) AJAX 請求不能發(fā)送給非同源站點。

試想一下檩互,如果沒有這些限制特幔,你在瀏覽網(wǎng)站的時候,你的cookie可以被別人隨意讀取闸昨,別人可以直接用你的身份去登陸網(wǎng)站蚯斯,肆意的發(fā)揮;你頁面的dom結(jié)構(gòu)還可以被別人控制饵较,肆意修改拍嵌,就問你一句:怕不怕?

反正

我怕循诉!

但是横辆,任何事情都有兩面性,瀏覽器禁止頁面腳本跨域請求提高了安全性的同時茄猫,也帶來一些不方便狈蚤。

很多時候我們確實需要跨站去請求一些資源,那瀏覽器同源策略的限制是不是有限苛刻了划纽?

其實細心的小伙伴們已經(jīng)發(fā)現(xiàn)脆侮,瀏覽器在為我們關(guān)閉一扇門的同時,給我們打開了一扇窗勇劣,帶有src屬性的img標簽靖避,你隨便在src里面寫上任意一個網(wǎng)站的圖片地址,就可以獲取這個圖片的數(shù)據(jù)芭毙,說明它是不受同源策略限制的筋蓖。script標簽也是一樣,又比如link標簽退敦,我們的css可以引入外部站點的css文件粘咖,獲取對方站點的css文件數(shù)據(jù)。

接下來,我們要介紹的jsonp就是利用script標簽的src不受跨越限制特性來實現(xiàn)的。

jsonp的實現(xiàn)原理

寫js的時候扇售,我們會在script標簽里面引入我們需要的js文件,有自己網(wǎng)站上的妨退,也有別的網(wǎng)站上的讽坏,不管哪個網(wǎng)站上的js文件锭魔,只要引入了,都可以去運行路呜,絲毫不受同源策略的影響迷捧。

利用這個特性,我們就開始寫我們的代碼了:

先從一段簡單的代碼開始:

(1)在http://a.com下新建http://a.com/test.html文件胀葱,代碼如下:



(2)在b.com下面新建文件http://b.com/test.js文件漠秋,代碼如下:


(3)訪問http://a.com/index.html文件,頁面上會彈出“111”

此時此刻抵屿,我們的這個小例子就已經(jīng)實現(xiàn)了跨域訪問數(shù)據(jù)了庆锦,這是很多人會想,http://b.com/test.php下面的數(shù)據(jù)我如何拿到呢轧葛?光彈出有什么用搂抒?我需要操作這個返回結(jié)果呀?

別急尿扯,我們繼續(xù)往下看:

(1)現(xiàn)在我們修改http://b.com/test.js文件求晶,代碼如下:


(2)修改http://a.com/test.html文件,代碼如下:


(3)訪問http://a.com/test.html姜胖,輸出如下:



看誉帅,現(xiàn)在http://b.com/test.js里面的數(shù)據(jù)我們拿到了淀散,跨域操作就是這么簡單右莱,3步就完成了。

不過善于思考的朋友又會問档插,你這樣復(fù)制的方式慢蜓,屬于全局變量的操作方式,這種方式不好郭膛。

#新手朋友們可能不知道為啥全局變量不好晨抡,這里稍稍解釋下,例如你引入了a.js文件则剃,a.js文件里面寫了var a='面面包';又引入了b.js文件耘柱,但是b.js文件里面寫了var a='屎';然后當你運行alert(a)的時候居然彈出了“屎”,你點了一份面包棍现,別人送你一坨屎调煎,你覺得這樣好嗎?所以說全局變量是個很討厭的東西己肮。

那么士袄,不用賦值的方式悲关,我們?nèi)绾伟褦?shù)據(jù)獲取到呢?

(1)現(xiàn)在我們修改http://b.com/test.js文件娄柳,代碼如下:


(2)修改http://a.com/test.html文件寓辱,代碼如下:


(3)訪問http://a.com/test.html,輸出如下:


現(xiàn)在不用擔(dān)心全局污染了赤拒,我們通過函數(shù)調(diào)用的方式獲取到了我們想要的數(shù)據(jù)秫筏。

不過又有朋友要問了,你這樣頁面一訪問就加載數(shù)據(jù)挎挖,如果我希望手動觸發(fā)事件之后才去獲取數(shù)據(jù)呢跳昼?

好,咱繼續(xù)往下看:

(1)現(xiàn)在我們修改http://b.com/test.js文件肋乍,代碼如下:


(2)修改http://a.com/test.html文件鹅颊,代碼如下:


(3)訪問http://a.com/test.html,點擊一下按鈕”點擊“墓造,效果如下:


通過動態(tài)生成script標簽的方式堪伍,我們實現(xiàn)了手動獲取數(shù)據(jù)的方式。

以上就是今天要介紹的jsonp的原理和實現(xiàn)方式觅闽,接下來帝雇,我會介紹jquery下jsonp的寫法以及通過jsonp跨域?qū)崿F(xiàn)sso單點登陸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蛉拙,一起剝皮案震驚了整個濱河市尸闸,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孕锄,老刑警劉巖吮廉,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異畸肆,居然都是意外死亡宦芦,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進店門轴脐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來调卑,“玉大人,你說我怎么就攤上這事大咱√窠В” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵碴巾,是天一觀的道長溯捆。 經(jīng)常有香客問我,道長餐抢,這世上最難降的妖魔是什么现使? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任低匙,我火速辦了婚禮,結(jié)果婚禮上碳锈,老公的妹妹穿的比我還像新娘顽冶。我一直安慰自己,他們只是感情好售碳,可當我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布强重。 她就那樣靜靜地躺著,像睡著了一般贸人。 火紅的嫁衣襯著肌膚如雪间景。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天艺智,我揣著相機與錄音倘要,去河邊找鬼。 笑死十拣,一個胖子當著我的面吹牛封拧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播夭问,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼泽西,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了缰趋?” 一聲冷哼從身側(cè)響起捧杉,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎秘血,沒想到半個月后味抖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡直撤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年非竿,在試婚紗的時候發(fā)現(xiàn)自己被綠了蜕着。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谋竖。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖承匣,靈堂內(nèi)的尸體忽然破棺而出蓖乘,到底是詐尸還是另有隱情,我是刑警寧澤韧骗,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布嘉抒,位于F島的核電站,受9級特大地震影響袍暴,放射性物質(zhì)發(fā)生泄漏些侍。R本人自食惡果不足惜隶症,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望岗宣。 院中可真熱鬧蚂会,春花似錦、人聲如沸耗式。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽刊咳。三九已至彪见,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間娱挨,已是汗流浹背余指。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留跷坝,地道東北人浪规。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像探孝,于是被迫代替她去往敵國和親笋婿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,492評論 2 348

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理顿颅,服務(wù)發(fā)現(xiàn)缸濒,斷路器,智...
    卡卡羅2017閱讀 134,629評論 18 139
  • AJAX 原生js操作ajax 1.創(chuàng)建XMLHttpRequest對象 var xhr = new XMLHtt...
    碧玉含香閱讀 3,179評論 0 7
  • 1.什么是同源策略 1.要了解同源策略捞慌,我們必須先知道源即orgin 以百度頁面為例,谷歌瀏覽器打開控制臺:輸入l...
    GarenWang閱讀 1,440評論 2 8
  • 跨域以及跨域的幾種方式 講解跨域之前我們先來看看什么是同源策略 什么是同源策略 通常來說柬批,瀏覽器出于安全方面的考慮...
    尾巴尾巴尾巴閱讀 1,600評論 0 1
  • 每年都說自己又18歲了 今年必須要好好正視一下自己22周歲啦 大學(xué)畢業(yè)是個大姑娘了 新一歲的小目標 盡快經(jīng)濟獨立 ...
    粒粒_閱讀 134評論 0 0