成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

解決跨域的兩種方案JSONP和CORS

曹金海 / 2741人閱讀

摘要:由于第二種方法如今已經(jīng)采用的非常少,所以我們?cè)谶@兒不做講解一帶填充的是一種可以在中繞過(guò)同源策略,并發(fā)起跨域請(qǐng)求的使用模式,可以啟動(dòng)的跨域請(qǐng)求同源策略有一個(gè)顯著的例外,腳本元素是可以規(guī)避檢查的。

講跨域之前,我們先來(lái)講同源策略(SOP),同源策略是網(wǎng)景公司提出的一個(gè)著名安全策略。所謂同源就是域名、協(xié)議、端口相同。例如http://www.12306.cn中,http就是超文本傳輸協(xié)議,12306就是域名,cn就是端口。如果兩個(gè)資源需要通信,那么他必須滿足SOP。而在前端中我們使用ajax進(jìn)行數(shù)據(jù)請(qǐng)求。
如果資源不同域,那么我們?cè)谑褂胊jax請(qǐng)求數(shù)據(jù)的時(shí)候,就會(huì)報(bào)錯(cuò),表示拒絕訪問(wèn)。那如何進(jìn)行跨域處理呢?事實(shí)上有三種方法1、JSONP,2、子域代理,3、CORS。由于第二種方法如今已經(jīng)采用的非常少,所以我們?cè)谶@兒不做講解

一、JSONP(JSON with Padding)

帶填充的JSON,是一種可以在JS中繞過(guò)同源策略,并發(fā)起跨域HTTP請(qǐng)求的使用模式,可以啟動(dòng)JS的跨域HTTP請(qǐng)求
同源策略有一個(gè)顯著的例外,HTML腳本元素是可以規(guī)避SOP檢查的。那就意味著我們可以采用動(dòng)態(tài)注入腳本的方式向其他源發(fā)出HTTP請(qǐng)求。JSONP正是利用了這個(gè)例外情況進(jìn)行跨域數(shù)據(jù)加載的。

1、工作原理

我們先來(lái)看一個(gè)例子:使用ajax請(qǐng)求一個(gè)普通的JSON文件。假設(shè)你使用ajax請(qǐng)求"http://jsonpjs.com/info.json",它會(huì)返回一個(gè)JSON文檔,其中包含一些信息

{
    "title": "jsonp explaintation",
    "author": "Cornelius"
}

瀏覽器接受到這個(gè)json文件后,就會(huì)把他當(dāng)成字符串進(jìn)行處理,但是這個(gè)字符串我們需要把它轉(zhuǎn)換為對(duì)象,才能夠被javascript所使用,這里我們就可以使用json.parse函數(shù)來(lái)完成。當(dāng)然由于同源策略的限制,ajax只能夠在同一個(gè)域中才能夠使用。但是正如我們前面提到的,script是html腳本元素它可以規(guī)避SOP的檢查所以我們?yōu)榱苏?qǐng)求到j(luò)son文件,我們可以使用這種方式


通過(guò)script元素請(qǐng)求資源,當(dāng)文件加載完成時(shí),瀏覽器會(huì)把json響應(yīng)當(dāng)作Javascript解析。但是這樣的情況下我們還是無(wú)法獲得json數(shù)據(jù)。
由于該對(duì)象沒(méi)有被存儲(chǔ),也沒(méi)有賦值給一個(gè)變量,或者作為參數(shù)傳遞給一個(gè)函數(shù),瀏覽器就會(huì)忽略它。
那么該如何獲取JSON輸出呢?
這兒有兩種方法,第一種直接由服務(wù)器把json數(shù)據(jù)進(jìn)行存儲(chǔ)。例如有一個(gè)外部URL,http://jsonjs.com//info.js(注意文件擴(kuò)展名是.js而不是.json),內(nèi)容如下

var jsonResponse = {
    "title": "jsonp explaintation",
    "author": "Cornelius"
}

當(dāng)文件加載完成后,我們就可以通過(guò)全局變量jsonResponse訪問(wèn)這個(gè)JSON對(duì)象了。當(dāng)該變量包含所請(qǐng)求數(shù)據(jù)時(shí),我們可以使用script.onload來(lái)通知代碼。那么另外一種通過(guò)一個(gè)回調(diào)函數(shù)代替全局變量的方式來(lái)傳遞JSON對(duì)象

jsonHandler({
    "title": "jsonp explaintation",
    "author": "Cornelius"
})

使用這種方式的好處在于,我們不需要依靠script元素的onload事件來(lái)判斷json是否可用,當(dāng)info.js被解析時(shí),回調(diào)便會(huì)自動(dòng)執(zhí)行。這需要加載
我的github如果對(duì)你有幫助請(qǐng)點(diǎn)一個(gè)star
第一次寫技術(shù)文章,不足的地方還請(qǐng)各位多多指教
參考文獻(xiàn):跨域資源共享 CORS 詳解 ---阮一峰

    [third-party javascript ---- Ben Vinegar Anton Kovalyov][2]

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/91752.html

相關(guān)文章

  • js跨域問(wèn)題及常用兩種解決方案

    摘要:類似這樣而在客戶端我們只需要定義一個(gè)預(yù)定好的回調(diào)函數(shù)即可。處理跨域請(qǐng)求得到的數(shù)據(jù)其中的是我們?cè)诳蛻舳硕x好的在數(shù)據(jù)請(qǐng)求成功后要執(zhí)行的回調(diào)函數(shù)。 跨域產(chǎn)生的原因 跨域是由瀏覽器的同源策略引起的,即不同源(協(xié)議,域名,端口中其中有一個(gè)不同)的js是不能讀取對(duì)方的資源的。當(dāng)要網(wǎng)站中的js要請(qǐng)求其他網(wǎng)站的數(shù)據(jù)時(shí)就會(huì)產(chǎn)生跨域問(wèn)題,就像下面這樣,瀏覽器會(huì)報(bào)錯(cuò)。 showImg(https://se...

    gyl_coder 評(píng)論0 收藏0
  • 前端跨域解決方案

    摘要:瀏覽器同源策略什么是瀏覽器同源策略同源策略是瀏覽器安全的基礎(chǔ)。同源策略限制從一個(gè)源加載的文檔或腳本如何與來(lái)自另一個(gè)源的資源進(jìn)行交互。這里我們做一下簡(jiǎn)要的總結(jié)受到瀏覽器同源策略的限制,頁(yè)面的無(wú)法被頁(yè)面的訪問(wèn)和操作。不受同源策略的限制。 瀏覽器同源策略 什么是瀏覽器同源策略? 同源策略(Same Origin Policy)是瀏覽器安全的基礎(chǔ)。 同源策略限制從一個(gè)源加載的文檔或腳本如何與來(lái)...

    Honwhy 評(píng)論0 收藏0
  • Web開(kāi)發(fā)之跨域跨域資源共享

    摘要:例外當(dāng)涉及到同源策略時(shí),有兩個(gè)主要的例外授信范圍兩個(gè)相互之間高度互信的域名,如公司域名,不遵守同源策略的限制。端口未將端口號(hào)加入到同源策略的組成部分之中,因此和屬于同源并且不受任何限制。 原文鏈接:http://www.devsai.com/2016/11/24/talk-CORS/ 同源策略(same origin policy) 1995年,同源政策由 Netscape 公司引入瀏...

    Eastboat 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<