跨域請(qǐng)求到底會(huì)不會(huì)被服務(wù)器執(zhí)行

首先供上我的答案(也可能會(huì)打臉):

會(huì)烙丛≡髡耍跨域請(qǐng)求瀏覽器可以正常發(fā)送服務(wù)器也可以正常返回響應(yīng),只不過(guò)響應(yīng)被瀏覽器攔截了而已垫毙。

揭曉一下答案霹疫,請(qǐng)求有的時(shí)候會(huì)被執(zhí)行,有的時(shí)候不會(huì)執(zhí)行综芥。

那啥時(shí)候會(huì)執(zhí)行丽蝎,啥時(shí)候不會(huì)執(zhí)行呢?其實(shí)這個(gè)問(wèn)題主要要從以下幾個(gè)方面去考慮:

  • 跨域究竟是誰(shuí)的策略毫痕?瀏覽器
  • 在什么時(shí)機(jī)會(huì)攔截請(qǐng)求征峦?
  • 究竟什么時(shí)候會(huì)發(fā)預(yù)檢請(qǐng)求迟几?非簡(jiǎn)單請(qǐng)求
  • 如果有預(yù)檢,請(qǐng)求什么時(shí)候會(huì)被真正執(zhí)行栏笆?預(yù)檢請(qǐng)求返回允許跨域的相關(guān)頭部時(shí)

跨域請(qǐng)求的攔截

首先我們俗稱(chēng)的跨域类腮,也就是瀏覽器的同源策略

同源:協(xié)議、域名蛉加、端口號(hào)相同

同站:二級(jí)域名一致即可(對(duì)協(xié)議和端口號(hào)沒(méi)有要求)

所以蚜枢,跨域請(qǐng)求的攔截是瀏覽器干的。

如果服務(wù)端攔截针饥,那每個(gè) Server 都要專(zhuān)門(mén)要為瀏覽器實(shí)現(xiàn)一個(gè)攔截策略厂抽,這根本不現(xiàn)實(shí)。另外丁眼,服務(wù)端就算是想攔截筷凤,也沒(méi)法判斷請(qǐng)求是否跨域,HTTP Reqeust 的所有 Header 都是可以被篡改的苞七,它用什么去判斷請(qǐng)求是否跨域呢藐守?很明顯服務(wù)端心有余而力不足啊蹂风!

什么時(shí)候攔截

請(qǐng)求一定是先發(fā)出去(預(yù)檢請(qǐng)求/簡(jiǎn)單請(qǐng)求的跨域請(qǐng)求)卢厂,在返回來(lái)的時(shí)候被瀏覽器攔截了,如果請(qǐng)求是有返回值的惠啄,會(huì)被瀏覽器隱藏掉慎恒。

預(yù)檢請(qǐng)求

什么條件下會(huì)發(fā)送預(yù)檢請(qǐng)求?

非簡(jiǎn)單請(qǐng)求:

  • 請(qǐng)求方法是除 GET撵渡、POST融柬、HEAD 之外的請(qǐng)求方法
  • 請(qǐng)求的首部包含除了 Accept(可以接受的媒體類(lèi)型)、Content-Type(實(shí)體主體的媒體類(lèi)型)姥闭、Accept-Language丹鸿、Content-Language 之外的請(qǐng)求頭
  • Content-Type 的值是除了 text/plain、application/x-www-form-urlencoded棚品、multipart/form-data 之外的值
  • 請(qǐng)求中的任意 XMLHttpRequest 對(duì)象注冊(cè)了任何事件監(jiān)聽(tīng)器靠欢;XMLHttpRequest 對(duì)象可以使用 XMLHttpRequest.upload 屬性訪問(wèn)。
  • 請(qǐng)求中使用了 ReadableStream 對(duì)象铜跑。

我們發(fā)現(xiàn)门怪,在發(fā)送非簡(jiǎn)單請(qǐng)求之前(真正的請(qǐng)求),瀏覽器會(huì)先發(fā)送一個(gè) Preflight 請(qǐng)求锅纺,也就是我們常說(shuō)的預(yù)檢請(qǐng)求掷空,它的方法為 OPTIONS。

這也就是為什么有的時(shí)候我們明明只發(fā)了一個(gè)請(qǐng)求,在 Network 里卻看到兩個(gè)坦弟。

預(yù)檢請(qǐng)求有一個(gè)很重要的作用就是 - 詢問(wèn)服務(wù)端是不是允許這次請(qǐng)求护锤,如果當(dāng)前請(qǐng)求是個(gè)跨域的請(qǐng)求,你可以理解為:詢問(wèn)服務(wù)端是不是允許請(qǐng)求在當(dāng)前域下跨域發(fā)送酿傍。

當(dāng)然烙懦,它還有其他的作用,比如 詢問(wèn) 服務(wù)端支持哪些 HTTP 方法赤炒。

預(yù)檢的過(guò)程

當(dāng)預(yù)檢請(qǐng)求到達(dá)服務(wù)端時(shí)氯析,服務(wù)端是不會(huì)真正執(zhí)行這個(gè)請(qǐng)求的邏輯的,只會(huì)在這個(gè)請(qǐng)求上返回一些 HTTP Header莺褒,沒(méi)有響應(yīng)體掩缓。以此來(lái)告訴客戶端是不是要發(fā)送真正的請(qǐng)求。

如果服務(wù)端告訴客戶端遵岩,請(qǐng)求是允許被發(fā)送的你辣,那真正的請(qǐng)求才會(huì)發(fā)出去。這時(shí)服務(wù)端才會(huì)真正執(zhí)行請(qǐng)求接口的邏輯旷余。

所以绢记,如果你發(fā)送的是一個(gè)簡(jiǎn)單請(qǐng)求,這個(gè)請(qǐng)求不管是不是會(huì)受到跨域的限制正卧,只要發(fā)出去了,一定會(huì)在服務(wù)端被執(zhí)行跪解,瀏覽器只是隱藏了返回值而已炉旷。

總結(jié)

  • 簡(jiǎn)單請(qǐng)求:不管是否跨域,只要發(fā)出去了叉讥,一定會(huì)到達(dá)服務(wù)端并被執(zhí)行窘行,瀏覽器只會(huì)隱藏返回值(攔截響應(yīng))
  • 復(fù)雜請(qǐng)求:先發(fā)預(yù)檢,預(yù)檢不會(huì)真正執(zhí)行業(yè)務(wù)邏輯图仓,預(yù)檢通過(guò)后才會(huì)發(fā)送真正請(qǐng)求并在服務(wù)端被執(zhí)行
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末罐盔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子救崔,更是在濱河造成了極大的恐慌惶看,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件六孵,死亡現(xiàn)場(chǎng)離奇詭異纬黎,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)劫窒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)本今,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事冠息∨泊眨” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵逛艰,是天一觀的道長(zhǎng)岖赋。 經(jīng)常有香客問(wèn)我,道長(zhǎng)瓮孙,這世上最難降的妖魔是什么唐断? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮杭抠,結(jié)果婚禮上脸甘,老公的妹妹穿的比我還像新娘。我一直安慰自己偏灿,他們只是感情好丹诀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著翁垂,像睡著了一般铆遭。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上沿猜,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天枚荣,我揣著相機(jī)與錄音,去河邊找鬼啼肩。 笑死橄妆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的祈坠。 我是一名探鬼主播害碾,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼赦拘!你這毒婦竟也來(lái)了慌随?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤躺同,失蹤者是張志新(化名)和其女友劉穎阁猜,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體笋籽,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蹦漠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了车海。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片笛园。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡隘击,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出研铆,到底是詐尸還是另有隱情埋同,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布棵红,位于F島的核電站凶赁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏逆甜。R本人自食惡果不足惜虱肄,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望交煞。 院中可真熱鬧咏窿,春花似錦、人聲如沸素征。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)御毅。三九已至根欧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間端蛆,已是汗流浹背凤粗。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留欺税,地道東北人侈沪。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像晚凿,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瘦馍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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