什么是同源策略
同源策略是瀏覽器的安全限制鲸拥,即非同域的腳本無(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ù)劣领。
步驟:
- 定義數(shù)據(jù)處理函數(shù)_fun
- 創(chuàng)建script標(biāo)簽姐军,src的地址執(zhí)行后端接口,最后加個(gè)參數(shù)callback=_fun
- 服務(wù)端在收到請(qǐng)求后尖淘,解析參數(shù)奕锌,計(jì)算返還數(shù)據(jù),輸出 fun(data) 字符串村生。
- 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)求: **
- 只使用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。
- 不使用HTTP請(qǐng)求發(fā)送定制請(qǐng)求頭(例如X-Modified等)
在簡(jiǎn)單請(qǐng)求下冗锁,我們只需設(shè)置Access-Control-Allow-Origin頭部即可帘瞭。
**復(fù)雜請(qǐng)求 **
- 使用了除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的担敌。
- 設(shè)置了定制請(qǐng)求頭的請(qǐng)求(例如摔敛,請(qǐng)求使用了例如X-PINGOTHER這樣的請(qǐng)求頭)
這類(lèi)請(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