JSONP_跨域

什么是同源策略

同源策略是瀏覽器的安全限制,即非同域的腳本無(wú)法互相獲取資源。這是為了保護(hù)用戶隱私,防止惡意行為。
兩個(gè)URL同協(xié)議、同域名、同端口,則表示他們同源。
在非同源情況下:
Cookie,localStrage,IndexedDb
DOM 無(wú)法獲取
Ajax請(qǐng)求無(wú)法發(fā)送

什么是跨域?跨域有幾種實(shí)現(xiàn)形式

跨域:繞過(guò)瀏覽器的同源限制訪問(wèn)其他域名的資源
跨域?qū)崿F(xiàn)形式:
JSONP
CORS
降域
postMassage

JSONP 的原理是什么

利用script標(biāo)簽可以跨域接受響應(yīng)的原理。
需要服務(wù)端支持,服務(wù)端將數(shù)據(jù)用回調(diào)函數(shù)包裹起來(lái),發(fā)送到頁(yè)面作為js代碼執(zhí)行函數(shù)。
步驟:

  1. 定義數(shù)據(jù)處理函數(shù)_fun
  2. 創(chuàng)建script標(biāo)簽,src的地址執(zhí)行后端接口,最后加個(gè)參數(shù)callback=_fun
  3. 服務(wù)端在收到請(qǐng)求后,解析參數(shù),計(jì)算返還數(shù)據(jù),輸出 fun(data) 字符串。
  4. fun(data)會(huì)放到script標(biāo)簽做為js執(zhí)行。此時(shí)會(huì)調(diào)用fun函數(shù),將data做為參數(shù)。

缺點(diǎn):
只能發(fā)起GET請(qǐng)求
比起AJAX,支持不夠全面。無(wú)法通過(guò)注冊(cè)一些事件監(jiān)聽(tīng)函數(shù)進(jìn)行其他處理。
需確定訪問(wèn)的異域服務(wù)器不會(huì)返回惡意的代碼
需注意抵御CSRF漏洞:網(wǎng)站通過(guò)JSONP跨域傳遞用戶認(rèn)證后的敏感信息時(shí),攻擊者可以構(gòu)造惡意的JSONP調(diào)用頁(yè)面,誘導(dǎo)被攻擊者訪問(wèn),以達(dá)到截取用戶敏感信息的目的。

CORS是什么

在CORS中的請(qǐng)求分為兩種:簡(jiǎn)單請(qǐng)求和復(fù)雜請(qǐng)求
** 簡(jiǎn)單請(qǐng)求: **

  1. 只使用GET,HEAD或者POST。如果使用POST來(lái)發(fā)送數(shù)據(jù)到服務(wù)器,那么使用HTTP POST請(qǐng)求發(fā)送到服務(wù)器的數(shù)據(jù)的Content-Type為以下幾種之一:application/x-www-form-urlencoded,multipart/form-data以及text/plain。
  2. 不使用HTTP請(qǐng)求發(fā)送定制請(qǐng)求頭(例如X-Modified等)
    在簡(jiǎn)單請(qǐng)求下,我們只需設(shè)置Access-Control-Allow-Origin頭部即可。

**復(fù)雜請(qǐng)求 **

  1. 使用了除GET,HEAD和POST以外的方法。如果使用POST方法發(fā)送請(qǐng)求數(shù)據(jù)時(shí)的Content-Type不是application/x-www-form-urlencoded,multipart/form-data或者text/plaint。例如,如果POST請(qǐng)求向服務(wù)器使用application/xml或者text/xml向服務(wù)器發(fā)送請(qǐng)求,那么這個(gè)請(qǐng)求就是preflighted的。
  2. 設(shè)置了定制請(qǐng)求頭的請(qǐng)求(例如,請(qǐng)求使用了例如X-PINGOTHER這樣的請(qǐng)求頭)
    這類請(qǐng)求在發(fā)送正式請(qǐng)求之前會(huì)發(fā)送一個(gè)Preflighted(預(yù)請(qǐng)求),Preflighted請(qǐng)求首先通過(guò)HTTP OPTIONS方法請(qǐng)求其他域上的資源,以確定發(fā)送實(shí)際的請(qǐng)求是否安全。這樣做,是因?yàn)榭缯菊?qǐng)求可能會(huì)對(duì)目的站點(diǎn)的數(shù)據(jù)造成破壞。我們第二次發(fā)的請(qǐng)求是一個(gè)復(fù)雜請(qǐng)求,服務(wù)端沒(méi)有響應(yīng)options的方法,導(dǎo)致預(yù)請(qǐng)求失敗,之后的請(qǐng)求也就終止了。

參考:http://www.qdfuns.com/notes/16837/7f24c8d1eb39750897060f0b12fa3855.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 什么是同源策略 同源政策(same-origin policy)是指同域名(或ip),同端口,同協(xié)議視為同一個(gè)域,...
    小囧兔閱讀 681評(píng)論 0 1
  • 什么是同源策略? 同源是瀏覽器出于安全方面的考慮,只允許與本域下的接口交互。不同源的客戶端腳本在沒(méi)有明確授權(quán)的情況...
    YM雨蒙閱讀 384評(píng)論 1 4
  • 如何在本地偽裝一個(gè)網(wǎng)站 1.編輯hostsmac:sudo vi /etc/hostswindows: C:\W...
    DeeJay_Y閱讀 330評(píng)論 0 0
  • Chapter 1 時(shí)間: 07:19 地點(diǎn):夷陵市黔江湖園岸邊 “有個(gè)女人,快看湖岸邊上有個(gè)女人!”...
    孝安_閱讀 240評(píng)論 0 0
  • 什么是input? 標(biāo)簽用于搜集用戶信息。根據(jù)不同的 type 屬性值,輸入字段擁有很多種形式,輸入字段可以是文本...
    饑人谷_Dylan閱讀 1,372評(píng)論 0 50

友情鏈接更多精彩內(nèi)容