亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

從原理分析CORS——我們到底是怎么跨域的

stormzhang / 857人閱讀

摘要:但是隨著互聯(lián)網(wǎng)的發(fā)展,同源策略嚴(yán)重影響了項(xiàng)目之間的連接尤其是大項(xiàng)目,有幾個(gè)域名需要進(jìn)行溝通的,標(biāo)準(zhǔn)推出了跨來(lái)源資源共享。

同源策略相信各位同學(xué)已然不陌生了,在這里不做過(guò)多闡述,簡(jiǎn)單介紹一下就好:

URL 說(shuō)明 是否允許
http://www.a.com/a.js?/ http://www.a.com/b.js 同一域名下 允許
http://www.a.com/lab/a.js / http://www.a.com/script/b.js 同一域名下不同文件夾 允許
http://www.a.com:8000/a.js?http://www.a.com/b.js 同一域名,不同端口 不允許
http://www.a.com/a.js?https://www.a.com/b.js 同一域名,不同協(xié)議 不允許
http://www.a.com/a.js?http://70.32.92.74/b.js 域名和域名對(duì)應(yīng)ip 不允許
http://www.a.com/a.js?http://script.a.com/b.js 主域相同,子域不同 不允許
http://www.a.com/a.js?http://a.com/b.js 同一域名,不同二級(jí)域名(同上) 不允許(cookie這種情況下也不允許訪問(wèn))
http://www.cnblogs.com/a.js?http://www.a.com/b.js 不同域名 不允許

以上表格系統(tǒng)的闡述了如何算是跨域。

那么下面我們
今天我們著重講講對(duì)抗同源策略的方法:
CORS——Cross-origin resource sharing(跨來(lái)源資源共享)

由于HTML 5的概念形成,在原有XHR的基礎(chǔ)上提出了XMLHttpRequest Level2(XHR2),在XHR2中對(duì)CORS有了很好的支持。(除了遠(yuǎn)古的IE8,IE9這些老古董)

我們先看看看CORS日常是怎么實(shí)現(xiàn)跨域的

? ?isset($_POST["name"])??$_POST["name"]?:?"",??
? ????"gender"?=>?isset($_POST["gender"])??$_POST["gender"]?:?""??
? );??
? ??
? //HTTP_ORIGIN是請(qǐng)求頭中的信息,在瀏覽器中直接展示為Origin
? $origin?=?isset($_SERVER["HTTP_ORIGIN"])??$_SERVER["HTTP_ORIGIN"]?:?"";??
? //此處是允許跨域的白名單
? $allow_origin?=?array(??
? ????"http://www.client.com",??
? ????"http://www.client2.com"??
? );??
? //判斷當(dāng)前Origin來(lái)源是否在白名單內(nèi),是的話就允許設(shè)置一套三式Header頭讓他跨域??
? if(in_array($origin,?$allow_origin)){?
?      //關(guān)鍵點(diǎn)是這里的一套三式?
? ????header("Access-Control-Allow-Origin:".$origin);??//允許的域名
? ????header("Access-Control-Allow-Methods:POST");??//允許的方法
? ????header("Access-Control-Allow-Headers:x-requested-with,content-type");??//服務(wù)器支持的頭信息
? }??
? ??
? echo?json_encode($ret);??
? ?>?

關(guān)鍵詞在header("Access-Control-Allow-*":) 一套三件,不同如果無(wú)法通過(guò)這一套三件的洗禮,那么就報(bào)類似下面這樣的錯(cuò):

XMLHttpRequest cannot load http://b.com. No "Access-Control-Allow-Origin" header is present on the requested resource. Origin "http://a.com" is therefore not allowed access.

這個(gè)就是瀏覽器同源策略造成的,如果我們沒(méi)有設(shè)置Header頭三件套的話("Access-Control-Allow-*":)那么對(duì)一切跨域請(qǐng)求操作瀏覽器都是拒絕的~。

但是隨著互聯(lián)網(wǎng)的發(fā)展,同源策略嚴(yán)重影響了項(xiàng)目之間的連接(尤其是大項(xiàng)目,有幾個(gè)域名需要進(jìn)行溝通的),W3C標(biāo)準(zhǔn)推出了“跨來(lái)源資源共享——CORS”。

回到前面的那段實(shí)例代碼,我們來(lái)分析分析 請(qǐng)求-》處理-》返回 一套流程的來(lái)龍去脈。

CORS的背后基本思想就是使用自定義的HTTP頭部讓瀏覽器與服務(wù)器進(jìn)行溝通,從而決定請(qǐng)求響應(yīng)是應(yīng)該成功還是應(yīng)該失敗。
當(dāng)Http請(qǐng)求發(fā)起(可以通過(guò)更新操作去測(cè)試POST,或者用JavaScript請(qǐng)求測(cè)試GET)的時(shí)候(不分跨不跨域)會(huì)類似帶著以下請(qǐng)求頭信息:

Origin:http://www.csdnblog.com

返回頭也會(huì)夾帶著類似如下信息:

Access-Control-Allow-Credentials:true 
Access-Control-Allow-Origin:http://www.csdnblog.com

一來(lái)一回的請(qǐng)求決定的請(qǐng)求決定了改請(qǐng)求是否會(huì)被瀏覽器通過(guò),如果返回頭中沒(méi)有這個(gè)頭部,或者有頭部但是源信息不匹配(就是說(shuō)返回頭%-Allow-Origin中沒(méi)有當(dāng)前請(qǐng)求站點(diǎn)的域名),那么瀏覽器就會(huì)幫我們駁回這次請(qǐng)求,同源策略在這里發(fā)揮了作用。

通過(guò)這一來(lái)一回我們不難發(fā)現(xiàn)其實(shí)瀏覽器判斷是否駁回的標(biāo)準(zhǔn)就是返回頭中是否有 Access-Control-Allow-% 這個(gè)信息,并且判斷這個(gè)信息是否合法(即這個(gè)信息是否是與請(qǐng)求頭中的Origin對(duì)應(yīng)的上),對(duì)應(yīng)的上就通過(guò),對(duì)應(yīng)不上就駁回。

既然搞懂這個(gè)我們就可以理解為何通過(guò)CORS設(shè)置兩三行Header代碼既可以輕松跨域了吧?

服務(wù)端代碼設(shè)置Header返回頭告訴瀏覽器“誰(shuí)誰(shuí)誰(shuí)是允許訪問(wèn)我的,你看到這家伙就給我放行吧~“。

所以如果在服務(wù)端代碼中設(shè)置:

header("Access-Control-Allow-Origin:*")

是的,這樣的話任何域名都可以請(qǐng)求你的服務(wù)器了,當(dāng)然這樣子你的服務(wù)器也就非常危險(xiǎn)了。

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/11213.html

相關(guān)文章

  • 那些年曾談起的跨域

    摘要:在中,在不同的域名下面進(jìn)行數(shù)據(jù)交互,就會(huì)遇到跨域問(wèn)題,說(shuō)到跨域首先要從同源說(shuō)起,瀏覽器為了提供一種安全的運(yùn)行環(huán)境,各個(gè)瀏覽器廠商協(xié)定使用同源策略。在上面說(shuō)過(guò)是不受同源策略限制的,但是出于安全原因,瀏覽器限制從腳本內(nèi)發(fā)起的跨源請(qǐng)求。 對(duì)于前端開發(fā)來(lái)說(shuō)跨域應(yīng)該是最不陌生的問(wèn)題了,無(wú)論是開發(fā)過(guò)程中還是在面試過(guò)程中都是一個(gè)經(jīng)常遇到的一個(gè)問(wèn)題,在開發(fā)過(guò)程中遇到這個(gè)問(wèn)題的話一般都是找后端同學(xué)去解決...

    galois 評(píng)論0 收藏0
  • ajax跨域,這應(yīng)該最全的解決方案了

    摘要:關(guān)于,強(qiáng)烈推薦閱讀跨域資源共享詳解阮一峰另外,這里也整理了一個(gè)實(shí)現(xiàn)原理圖簡(jiǎn)化版如何判斷是否是簡(jiǎn)單請(qǐng)求瀏覽器將請(qǐng)求分成兩類簡(jiǎn)單請(qǐng)求和非簡(jiǎn)單請(qǐng)求。 前言 從剛接觸前端開發(fā)起,跨域這個(gè)詞就一直以很高的頻率在身邊重復(fù)出現(xiàn),一直到現(xiàn)在,已經(jīng)調(diào)試過(guò)N個(gè)跨域相關(guān)的問(wèn)題了,16年時(shí)也整理過(guò)一篇相關(guān)文章,但是感覺(jué)還是差了點(diǎn)什么,于是現(xiàn)在重新梳理了一下。 個(gè)人見識(shí)有限,如有差錯(cuò),請(qǐng)多多見諒,歡迎提出iss...

    ytwman 評(píng)論0 收藏0
  • 20K前端大佬面試(關(guān)于如何回答ajax跨域問(wèn)題)

    摘要:在接觸前端開發(fā)起,跨域這個(gè)詞就一直以很高的頻率在我們學(xué)習(xí)工作中重復(fù)出現(xiàn),最近在工作中遇到了跨域的相關(guān)問(wèn)題,這里我把它總結(jié)記錄一下。 在接觸前端開發(fā)起,跨域這個(gè)詞就一直以很高的頻率在我們學(xué)習(xí)工作中重復(fù)出現(xiàn),最近在工作中遇到了跨域的相關(guān)問(wèn)題,這里我把它總結(jié)記錄一下。關(guān)于跨域,有N種類型,現(xiàn)在我只專注于ajax請(qǐng)求跨域(ajax跨域只是屬于瀏覽器同源策略中的一部分,其它的這里不做介紹),內(nèi)容...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<