一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

https引起的跨域問(wèn)題-COE&casestudy

 編程一生 2022-03-09

問(wèn)題很簡(jiǎn)單,開發(fā)一個(gè)后臺(tái)服務(wù)。這個(gè)服務(wù)呢,包含了幾個(gè)團(tuán)隊(duì)的后臺(tái)服務(wù)之間的相互調(diào)用。這些后臺(tái)服務(wù)之間的頂級(jí)域名(相關(guān)概念后面會(huì)解釋)相同,請(qǐng)求卻報(bào)錯(cuò)說(shuō)有跨域問(wèn)題。經(jīng)調(diào)查,原因是調(diào)用方是http服務(wù),被調(diào)用方是https服務(wù),引起的跨域問(wèn)題。如下圖所示:

這里假設(shè)問(wèn)題到生產(chǎn)環(huán)境才發(fā)現(xiàn),本篇使用COE的寫法來(lái)論述問(wèn)題。COE(correction of error)更正錯(cuò)誤,是很多公司用來(lái)做問(wèn)題或者事故復(fù)盤的手段。COE因?yàn)槊Q中帶著“有人犯錯(cuò)啦”的意思,很多公司為了表明“追究責(zé)任不是目的,重要的是吸取教訓(xùn),避免同樣和同類的問(wèn)題”,把COE叫做casestudy個(gè)案研究。實(shí)踐證明,不管叫什么,恐懼一點(diǎn)也不會(huì)減少。

事故描述

red服務(wù)從前端調(diào)用gray服務(wù)時(shí)報(bào)錯(cuò):跨域錯(cuò)誤。經(jīng)排查確認(rèn)由于http的域名下從前端調(diào)用https導(dǎo)致。

事故責(zé)任人

都是我的錯(cuò)

事故影響

新服務(wù)上線,無(wú)正式業(yè)務(wù)接入,無(wú)業(yè)務(wù)影響。

時(shí)間線

14:00 灰度發(fā)布新版本并進(jìn)行驗(yàn)證

14:20 驗(yàn)證發(fā)現(xiàn)使用Chrome瀏覽器通過(guò)【檢查】-【網(wǎng)絡(luò)】功能觀察到發(fā)起了一個(gè)OPTIONS類型的COR跨域請(qǐng)求,請(qǐng)求報(bào)錯(cuò):


15:00 確認(rèn)是http訪問(wèn)https導(dǎo)致違反了同源策略,導(dǎo)致跨域問(wèn)題。新服務(wù)上線,無(wú)正式業(yè)務(wù)接入,無(wú)業(yè)務(wù)影響。所以未進(jìn)行版本回滾。

根本原因分析

1、為什么會(huì)發(fā)生問(wèn)題?

出于安全原因,瀏覽器限制從腳本內(nèi)發(fā)起的跨源HTTP請(qǐng)求。當(dāng)一個(gè)資源從與該資源本身所在的服務(wù)器不同源,請(qǐng)求一個(gè)資源時(shí),資源會(huì)發(fā)起一個(gè)跨域 HTTP 請(qǐng)求。

同源的判斷標(biāo)準(zhǔn)是:

  • 協(xié)議

  • 域名

  • 端口號(hào)

以上三者都要相同。發(fā)生問(wèn)題的請(qǐng)求,由于其中域名默認(rèn)只要求頂級(jí)域名相同,此條件滿足;協(xié)議一個(gè)是https,一個(gè)是http,不滿足;https端口為443,http端口為80,不滿足??傮w不滿足同源策略,而且被訪問(wèn)的后端沒(méi)有做跨域處理。

2、為什么沒(méi)有做跨域處理?

因?yàn)轫敿?jí)域名相同,并未考慮到有跨域問(wèn)題。且整個(gè)在測(cè)試環(huán)境下測(cè)試通過(guò),并未發(fā)生問(wèn)題。

3、為什么測(cè)試環(huán)境沒(méi)有問(wèn)題?

因?yàn)闇y(cè)試環(huán)境,同時(shí)支持http和https兩種方式,當(dāng)時(shí)配置時(shí)沒(méi)有考慮兩者直接的差異,直接使用http的路徑。

在生產(chǎn)環(huán)境,根據(jù)安全的要求,關(guān)閉了http方式,只能使用https方式,造成問(wèn)題。

4、為什么調(diào)用端使用http協(xié)議?

因?yàn)檎{(diào)用端的框架是幾年前的老系統(tǒng),線上環(huán)境追求穩(wěn)定性,變更成本高,目前還維持之前的現(xiàn)狀。

5、為什么調(diào)用方是post調(diào)用,實(shí)際上的請(qǐng)求卻是options?

出于安全考慮,并不是所有域名訪問(wèn)后端服務(wù)都可以。其實(shí)在正式跨域之前,瀏覽器會(huì)根據(jù)需要發(fā)起一次預(yù)檢(也就是option請(qǐng)求)。預(yù)檢請(qǐng)求不成功,不會(huì)發(fā)起正式請(qǐng)求。

瀏覽器將CORS請(qǐng)求分為兩類:簡(jiǎn)單請(qǐng)求(simple request)和非簡(jiǎn)單請(qǐng)求(not-simple-request),簡(jiǎn)單請(qǐng)求瀏覽器不會(huì)預(yù)檢,而非簡(jiǎn)單請(qǐng)求會(huì)預(yù)檢。

同時(shí)滿足下列三大條件,就屬于簡(jiǎn)單請(qǐng)求,否則屬于非簡(jiǎn)單請(qǐng)求

  • 請(qǐng)求方式只能是:GET、POST、HEAD

  • HTTP請(qǐng)求頭限制這幾種字段:Accept、Accept-Language、Content-Language、Content-Type、Last-Event-ID

  • Content-type只能?。篴pplication/x-www-form-urlencoded、multipart/form-data、text/plain

對(duì)于簡(jiǎn)單請(qǐng)求,瀏覽器直接請(qǐng)求,會(huì)在請(qǐng)求頭信息中,增加一個(gè)origin字段,來(lái)說(shuō)明本次請(qǐng)求來(lái)自哪個(gè)源(協(xié)議+域名+端口)。服務(wù)器根據(jù)這個(gè)值,來(lái)決定是否同意該請(qǐng)求,服務(wù)器返回的響應(yīng)會(huì)多幾個(gè)頭信息字段,如圖所示:上面的頭信息中,三個(gè)與CORS請(qǐng)求相關(guān),都是以Access-Control-開頭。

  • Access-Control-Allow-Origin:該字段是必須的,* 表示接受任意域名的請(qǐng)求,還可以指定域名

  • Access-Control-Allow-Credentials:該字段可選,是個(gè)布爾值,表示是否可以攜帶cookie,(注意:如果Access-Control-Allow-Origin字段設(shè)置*,此字段設(shè)為true無(wú)效)

  • Access-Control-Allow-Headers:該字段可選,里面可以獲取Cache-Control、Content-Type、Expires等,如果想要拿到其他字段,就可以在這個(gè)字段中指定。

經(jīng)驗(yàn)教訓(xùn)

首先是知識(shí)方面:之前對(duì)同域有誤解,認(rèn)為只需要頂級(jí)域名相同。實(shí)際上需要符合域名、協(xié)議和端口三者同源的同源策略。

其次是沒(méi)有對(duì)線上線下的差異做仔細(xì)的調(diào)研分析。

后續(xù)優(yōu)化

首先要修復(fù)問(wèn)題,跨域有風(fēng)險(xiǎn)。可以使用調(diào)用方自帶的代理功能。被調(diào)用方提供一個(gè)RPC調(diào)用,調(diào)用方使用代理來(lái)轉(zhuǎn)換。

小知識(shí)

根域名

簡(jiǎn)單的來(lái)說(shuō)就是類似.com這種,或者中國(guó)的.cn英國(guó)的.uk日本的.jp,這些是由“互聯(lián)網(wǎng)名稱與數(shù)字地址分配機(jī)構(gòu)”(The Internet Corporation for Assigned Names and Numbers ,簡(jiǎn)稱ICANN)來(lái)分配的。

頂級(jí)域名

簡(jiǎn)單來(lái)說(shuō)頂級(jí)域名就是就是在根域名的前面加上你自己定義的字母或數(shù)字等字符串包括連字符-(包括連字符但是不能連續(xù)是連字符,且連字符不能在第一個(gè))例如這樣web.com或者web.cn這樣的既是頂級(jí)域名。

二級(jí)域名

當(dāng)你注冊(cè)了一個(gè)頂級(jí)域名后,例如web.cn,你就可以在你的互聯(lián)網(wǎng)服務(wù)提供商的dns解析系統(tǒng)上自由分配你的二級(jí)域名或者三級(jí)域名等等,web1.web.cn,web2.web1.web.cn等等,以此類推根域名前面有幾個(gè)字符串就是幾級(jí)域名。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    激情五月天深爱丁香婷婷| 91久久精品国产一区蜜臀| 一区二区在线激情视频| 中文字幕五月婷婷免费| 国产又粗又猛又黄又爽视频免费| 在线欧洲免费无线码二区免费| 久久精品国产亚洲熟女| 天堂热东京热男人天堂| 亚洲视频一区二区久久久| 欧美日韩成人在线一区| 国产精品亚洲二区三区| 亚洲黑人精品一区二区欧美| 黄片美女在线免费观看| 日韩精品一级片免费看| 亚洲一区二区三区在线中文字幕| 91精品国产品国语在线不卡| 日韩少妇人妻中文字幕| 日韩毛片视频免费观看| 国产女性精品一区二区三区| 国产又粗又黄又爽又硬的| 午夜精品在线观看视频午夜| 少妇高潮呻吟浪语91| 日韩女优视频国产一区| 欧美丝袜诱惑一区二区| 亚洲精品国产福利在线| 精品日韩欧美一区久久| 国产午夜免费在线视频| 暴力性生活在线免费视频| 欧美一区二区黑人在线| 亚洲精品成人综合色在线| 人妻一区二区三区在线| 欧美综合色婷婷欧美激情| 91插插插外国一区二区婷婷| 美国欧洲日本韩国二本道| 国产日产欧美精品大秀| 少妇特黄av一区二区三区| 黄色片一区二区在线观看| 亚洲一区二区三在线播放| 视频一区日韩经典中文字幕| 成人亚洲国产精品一区不卡| 深夜日本福利在线观看|