Android面試筆記——HTTP/HTTPS

HTTP和HTTPS是面試常問的問題,內(nèi)容比較多而且復(fù)雜心肪,HTTPS里面的細(xì)節(jié)很多锭亏,本文只是把主要的東西寫出來,想要弄懂HTTPS還是要多看幾篇博文硬鞍,自己動手走一遍把各個攻擊的case搞明白慧瘤。

1 HTTP

1.1 HTTP基本概念

HTTP 是超?本傳輸協(xié)議,也就是HyperText Transfer Protocol固该。

1.1.1 HTTP常見狀態(tài)碼

狀態(tài)碼 含義 常見狀態(tài)碼
1xx 1xx 類狀態(tài)碼屬于提示信息锅减,是協(xié)議處理中的?種中間狀態(tài),實際?到的?較少伐坏。
2xx 2xx 類狀態(tài)碼表示服務(wù)器成功處理了客戶端的請求 200怔匣、204、206
3xx 3xx 類狀態(tài)碼表示客戶端請求的資源發(fā)送了變動,需要客戶端?新的 URL 重新發(fā)送請求獲取資源每瞒,也就是重定向金闽。 301、302剿骨、304
4xx 4xx 類狀態(tài)碼表示客戶端發(fā)送的報?有誤代芜,服務(wù)器?法處理,也就是錯誤碼的含義浓利。 400挤庇、403、404
5xx 5xx 類狀態(tài)碼表示客戶端請求報?正確贷掖,但是服務(wù)器處理時內(nèi)部發(fā)?了錯誤嫡秕,屬于服務(wù)器端的錯誤碼。 500苹威、501昆咽、502

1.1.2 HTTP常見字段

Host 字段:客戶端發(fā)送請求時,?來指定服務(wù)器的域名屠升。 Host: www.baidu.com

Content-Length 字段 :服務(wù)器在返回數(shù)據(jù)時潮改,會有 Content-Length 字段,表明本次回應(yīng)的數(shù)據(jù)長度腹暖。 Content-Length: 1000

Connection 字段 :Connection 字段最常用于客戶端要求服務(wù)器使? TCP 持久連接汇在,以便其他請求復(fù)?。 HTTP/1.1 版本的默認(rèn)連接都是持久連接脏答,但為了兼容?版本的 HTTP糕殉,需要指定 Connection ?部字段的值為Keep-Alive 。

Content-Type 字段 :Content-Type 字段?于服務(wù)器回應(yīng)時殖告,告訴客戶端阿蝶,本次數(shù)據(jù)是什么格式 。Content-Type: text/html; charset=utf-8

Content-Encoding 字段 :Content-Encoding 字段說明數(shù)據(jù)的壓縮?法黄绩。表示服務(wù)器返回的數(shù)據(jù)使用了什么壓縮格式 羡洁。客戶端在請求時爽丹,? Accept-Encoding 字段說明自己可以接受哪些壓縮?法筑煮。 Accept-Encoding: gzip, deflate

下圖為訪問百度的返回字段

image-20210914143022504.png

1.1.3 HTTP常見方法

方法 說明
GET GET方法用于使用給定的URI從給定服務(wù)器中檢索信息,即從指定資源中請求數(shù)據(jù)粤蝎。使用GET方法的請求應(yīng)該只是檢索數(shù)據(jù)真仲,并且不應(yīng)對數(shù)據(jù)產(chǎn)生其他影響。
POST POST方法用于將數(shù)據(jù)發(fā)送到服務(wù)器以創(chuàng)建或更新資源初澎,它向 URI 指定的資源提交數(shù)據(jù)秸应,數(shù)據(jù)就放在報?的 body 里。
HEAD HEAD方法與GET方法相同,但沒有響應(yīng)體软啼,僅傳輸狀態(tài)行和標(biāo)題部分桑谍。這對于恢復(fù)相應(yīng)頭部編寫的元數(shù)據(jù)非常有用,而無需傳輸整個內(nèi)容焰宣。
PUT PUT方法用于將數(shù)據(jù)發(fā)送到服務(wù)器以創(chuàng)建或更新資源霉囚,它可以用上傳的內(nèi)容替換目標(biāo)資源中的所有當(dāng)前內(nèi)容。
DELETE DELETE方法用來刪除指定的資源匕积,它會刪除URI給出的目標(biāo)資源的所有當(dāng)前內(nèi)容。
CONNECT CONNECT方法用來建立到給定URI標(biāo)識的服務(wù)器的隧道榜跌;它通過簡單的TCP / IP隧道更改請求連接闪唆,通常實使用解碼的HTTP代理來進(jìn)行SSL編碼的通信。
OPTIONS OPTIONS方法用來描述了目標(biāo)資源的通信選項钓葫,會返回服務(wù)器支持預(yù)定義URL的HTTP策略悄蕾。
TRACE TRACE方法用于沿著目標(biāo)資源的路徑執(zhí)行消息環(huán)回測試;它回應(yīng)收到的請求础浮,以便客戶可以看到中間服務(wù)器進(jìn)行了哪些(假設(shè)任何)進(jìn)度或增量帆调。

1.2 HTTP特性

優(yōu)點

  1. 簡單
    HTTP 基本的報?格式就是 header + body ,頭部信息也是 key-value 簡單?本的形式豆同, 易于理解番刊,降低了學(xué)習(xí)和使?的?檻。

  2. 靈活和易于擴(kuò)展
    HTTP協(xié)議?的各類請求?法影锈、 URI/URL芹务、狀態(tài)碼、頭字段等每個組成要求都沒有被固定死鸭廷,都允許開發(fā)?員?定義和擴(kuò)充枣抱。

    同時 HTTP 由于是?作在應(yīng)?層( OSI 第七層),則它下層可以隨意變化辆床。

    HTTPS 也就是在 HTTP 與 TCP 層之間增加了 SSL/TLS 安全傳輸層佳晶, HTTP/3 甚?把 TCP 層換成了基于 UDP 的QUIC。

  3. 應(yīng)用廣泛和跨平臺
    互聯(lián)?發(fā)展?今讼载, HTTP 的應(yīng)?范圍?常的?泛轿秧,從臺式機(jī)的瀏覽器到?機(jī)上的各種 APP,從看新聞维雇、刷貼吧到購物淤刃、理財、吃雞吱型, HTTP 的應(yīng)??地開花逸贾,同時天然具有跨平臺的優(yōu)越性。

缺點

  1. 無狀態(tài)

    ?狀態(tài)的好處,因為服務(wù)器不會去記憶 HTTP 的狀態(tài)铝侵,所以不需要額外的資源來記錄狀態(tài)信息灼伤,這能減輕服務(wù)器的負(fù)擔(dān),能夠把更多的 CPU 和內(nèi)存?來對外提供服務(wù)咪鲜。

    ?狀態(tài)的壞處狐赡,既然服務(wù)器沒有記憶能?,它在完成有關(guān)聯(lián)性的操作時會?常麻煩疟丙。

    解決方案Cookie:Cookie通過在請求和響應(yīng)報?中寫? Cookie 信息來控制客戶端的狀態(tài)颖侄。在客戶端第?次請求后,服務(wù)器會下發(fā)?個裝有客戶信息的「?貼紙」享郊,后續(xù)客戶端請求服務(wù)器的時候览祖,帶上「?貼紙」,服務(wù)器就能認(rèn)得了了炊琉,

  2. 明文傳輸展蒂、不安全

1.3 HTTP版本演變

1.3.1 HTTP/1.0 → HTTP/1.1

性能提升:

  1. 使? TCP ?連接的?式改善了 HTTP/1.0 短連接造成的性能開銷。
  2. ?持管道(pipeline)網(wǎng)絡(luò)傳輸苔咪,只要第?個請求發(fā)出去了锰悼,不必等其回來,就可以發(fā)第?個請求出去团赏,可以減少整體的響應(yīng)時間箕般。

HTTP/1.1 的性能瓶頸:

  • 請求 / 響應(yīng)頭部未經(jīng)壓縮就發(fā)送,?部信息越多延遲越?馆里。只能壓縮 Body 的部分隘世;
  • 發(fā)送冗?的?部。每次互相發(fā)送相同的?部造成的浪費較多鸠踪;
  • 服務(wù)器是按請求的順序響應(yīng)的丙者,如果服務(wù)器響應(yīng)慢,會招致客戶端?直請求不到數(shù)據(jù)营密,也就是隊頭阻塞械媒;
  • 沒有請求優(yōu)先級控制;
  • 請求只能從客戶端開始评汰,服務(wù)器只能被動響應(yīng)纷捞。

1.3.2 HTTP/1.1 → HTTP/2

HTTP/2 協(xié)議是基于 HTTPS 的,所以 HTTP/2 的安全性也是有保障的被去。

性能提升:

  1. 頭部壓縮:HTTP/2 會壓縮頭(Header)如果你同時發(fā)出多個請求主儡,他們的頭是?樣的或是相似的,那么惨缆,協(xié)議會幫你消除重復(fù)的部分糜值。

    HPACK 算法:在客戶端和服務(wù)器同時維護(hù)?張頭信息表丰捷,所有字段都會存?這個表,?成?個索引號寂汇,以后就不發(fā)送同樣字段了病往,只發(fā)送索引號,這樣就提?速度了骄瓣。

  2. 二進(jìn)制格式:HTTP/2 不再像 HTTP/1.1 ?的純?本形式的報?停巷,?是全?采?了二進(jìn)制格式,頭信息和數(shù)據(jù)體都是二進(jìn)制榕栏,并且統(tǒng)稱為幀(frame): 頭信息幀和數(shù)據(jù)幀畔勤。

    收到報?后,?需再將明?的報?轉(zhuǎn)成二進(jìn)制臼膏,?是直接解析二進(jìn)制報?硼被,這增加了數(shù)據(jù)傳輸?shù)男?/p>

  3. 數(shù)據(jù)流:HTTP/2 的數(shù)據(jù)包不是按順序發(fā)送的,同?個連接??連續(xù)的數(shù)據(jù)包渗磅,可能屬于不同的回應(yīng)。因此检访,必須要對數(shù)據(jù)包做標(biāo)記始鱼,指出它屬于哪個回應(yīng)。

    每個請求或回應(yīng)的所有數(shù)據(jù)包脆贵,稱為?個數(shù)據(jù)流( Stream )医清。每個數(shù)據(jù)流都標(biāo)記著?個獨一無二的編號,其中規(guī)定客戶端發(fā)出的數(shù)據(jù)流編號為奇數(shù)卖氨, 服務(wù)器發(fā)出的數(shù)據(jù)流編號為偶數(shù)会烙。

    客戶端還可以指定數(shù)據(jù)流的優(yōu)先級。優(yōu)先級?的請求筒捺,服務(wù)器就先響應(yīng)該請求柏腻。

  4. 多路復(fù)用:HTTP/2 是可以在?個連接中并發(fā)多個請求或回應(yīng),?不用按照順序??對應(yīng)系吭。移除了 HTTP/1.1 中的串行請求五嫂,不需要排隊等待,也就不會再出現(xiàn)「隊頭阻塞」問題肯尺, 降低了延遲沃缘,?幅度提?了連接的利用率

  5. 服務(wù)器推送:HTTP/2 還在?定程度上改善了傳統(tǒng)的「請求 - 應(yīng)答」工作模式则吟,服務(wù)不再是被動地響應(yīng)槐臀,也可以主動向客戶端發(fā)送消息。

1.3.3 HTTP/2 → HTTP/3

HTTP/2 主要的問題在于氓仲,多個 HTTP 請求在復(fù)??個 TCP 連接水慨,下層的 TCP 協(xié)議是不知道有多少個 HTTP 請求的得糜。所以?旦發(fā)?了丟包現(xiàn)象,就會觸發(fā) TCP 的重傳機(jī)制讥巡,這樣在?個 TCP 連接中的所有的 HTTP 請求都必須等待這個丟了的包被重傳回來掀亩。

  • HTTP/1.1 中的管道( pipeline)傳輸中如果有?個請求阻塞了,那么隊列后請求也統(tǒng)統(tǒng)被阻塞住了欢顷。
  • HTTP/2 多個請求復(fù)??個TCP連接槽棍,?旦發(fā)生丟包,就會阻塞住所有的 HTTP 請求抬驴。

這都是基于 TCP 傳輸層的問題炼七,所以 HTTP/3 把 HTTP 下層的 TCP 協(xié)議改成了 UDP

UDP 發(fā)生是不管順序布持,也不管丟包的豌拙,所以不會出現(xiàn) HTTP/1.1 的隊頭阻塞 和 HTTP/2 的?個丟包全部重傳問題。

UDP 是不可靠傳輸?shù)奶馀?UDP 的 QUIC 協(xié)議 可以實現(xiàn)類似 TCP 的可靠性傳輸按傅。

  • QUIC 有??的?套機(jī)制可以保證傳輸?shù)目煽啃缘摹?code>當(dāng)某個流發(fā)生丟包時,只會阻塞這個流胧卤, 其他流不會受到影響唯绍。
  • TLS3 升級成了最新的 1.3 版本,頭部壓縮算法也升級成了 QPack 枝誊。
  • HTTPS 要建立?個連接况芒,要花費 6 次交互,先是建?三次握?叶撒,然后是 TLS/1.3 的三次握?绝骚。 QUIC 直接把以往的 TCP 和 TLS/1.3 的 6 次交互合并成了 3 次,減少了交互次數(shù)

1.3.4 HTTP各版本層次圖

image-20210914162124092.png

2 HTTPS

2.1 HTTP 與 HTTPS 的區(qū)別

  1. HTTP 是超?本傳輸協(xié)議祠够,信息是明?傳輸压汪,存在安全風(fēng)險的問題。 HTTPS 則解決 HTTP 不安全的缺陷哪审,在TCP 和 HTTP 網(wǎng)絡(luò)層之間加?了 SSL/TLS 安全協(xié)議蛾魄,使得報?能夠加密傳輸。
  2. HTTP 連接建?相對簡單湿滓, TCP 三次握?之后便可進(jìn)? HTTP 的報?傳輸滴须。而HTTPS 在 TCP 三次握?之后,還需進(jìn)? SSL/TLS 的握?過程叽奥,才可進(jìn)?加密報?傳輸扔水。
  3. HTTP 的端口號是 80, HTTPS 的端口號是 443朝氓。
  4. HTTPS 協(xié)議需要向 CA(證書權(quán)威機(jī)構(gòu))申請數(shù)字證書魔市,來保證服務(wù)器的身份是可信的主届。

2.2 HTTPS安全性實現(xiàn)

混合加密

HTTPS 采?的是對稱加密和?對稱加密結(jié)合的「混合加密」?式:

  • 在通信建?前采用?對稱加密的?式交換「會話秘鑰」,后續(xù)就不再使??對稱加密待德。
  • 在通信過程中全部使用對稱加密的「會話秘鑰」的?式加密明?數(shù)據(jù)君丁。

采?「混合加密」的?式的原因:

  • 對稱加密只使??個密鑰,運算速度快将宪,密鑰必須保密绘闷,無法做到安全的密鑰交換。
  • 非對稱加密使用兩個密鑰:公鑰和私鑰较坛,公鑰可以任意分發(fā)?私鑰保密印蔗,解決了密鑰交換問題但速度慢。

摘要算法

摘要算法?來實現(xiàn)完整性丑勤,能夠為數(shù)據(jù)?成獨???的「指紋」华嘹,?于校驗數(shù)據(jù)的完整性,解決了篡改的?險法竞。

客戶端在發(fā)送明?之前會通過摘要算法算出明文的「指紋」耙厚,發(fā)送的時候把「指紋 + 明文」?同加密成密文后,發(fā)送給服務(wù)器岔霸,服務(wù)器解密后颜曾,用相同的摘要算法算出發(fā)送過來的明文,通過?較客戶端攜帶的「指紋」和當(dāng)前算出的「指紋」做?較秉剑,若「指紋」相同,說明數(shù)據(jù)是完整的稠诲。

數(shù)字證書

客戶端先向服務(wù)器端索要公鑰侦鹏,然后?公鑰加密信息,服務(wù)器收到密文后臀叙,???的私鑰解密略水。這就存在些問題,如何保證公鑰不被篡改和信任度劝萤?

所以這?就需要借助第三?權(quán)威機(jī)構(gòu) CA (數(shù)字證書認(rèn)證機(jī)構(gòu))渊涝,將服務(wù)器公鑰放在數(shù)字證書(由數(shù)字證書認(rèn)證機(jī)構(gòu)頒發(fā))中,只要證書是可信的床嫌,公鑰就是可信的跨释。

通過數(shù)字證書的?式保證服務(wù)器公鑰的身份,解決冒充的?險 厌处。

證書簽名和驗證過程

公鑰加密私鑰解密鳖谈,私鑰加密公鑰解密。

CA公鑰已經(jīng)事先置入到了瀏覽器或者操作系統(tǒng)里阔涉。

image-20210914215300290.png
步驟 服務(wù)端 CA 客戶端
1 服務(wù)器把自己的公鑰注冊到CA
2 CA用自己的私鑰將服務(wù)器的公鑰和域名的其他信息加密成證書并頒發(fā)給服務(wù)器
3 客戶端發(fā)起網(wǎng)絡(luò)請求
4 客戶端拿到服務(wù)器的數(shù)字證書后使用CA公鑰解密缆娃,確認(rèn)服務(wù)器數(shù)字證書的真實性
5 從數(shù)字證書獲取服務(wù)器公鑰后捷绒,使用服務(wù)器公鑰對報文加密傳輸

兩種情況

  1. 如果數(shù)字證書被其他人篡改,由于加密數(shù)據(jù)不是CA私鑰加密而來贯要,所以無法解密成功暖侨。

  2. 如果攻擊者知道A.com使用的是某家CA機(jī)構(gòu)的證書,那么他也去這家CA機(jī)構(gòu)申請一個合法的證書崇渗,然后在瀏覽器請求A.com時對返回的加密證書數(shù)據(jù)進(jìn)行替換字逗。

    由于攻擊者申請的證書也是由正規(guī)CA機(jī)構(gòu)制作的,因此這段加密數(shù)據(jù)可以成功被解密显押。但CA機(jī)構(gòu)在制作的證書時除了網(wǎng)站的公鑰外扳肛,還要包含許多其他數(shù)據(jù),用來輔助進(jìn)行校驗乘碑,比如說網(wǎng)站的域名挖息。如果域名對不上依然檢驗失敗

2.3 HTTPS建立連接過程

https.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末兽肤,一起剝皮案震驚了整個濱河市套腹,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌资铡,老刑警劉巖电禀,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異笤休,居然都是意外死亡尖飞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門店雅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來政基,“玉大人,你說我怎么就攤上這事闹啦【诿鳎” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵窍奋,是天一觀的道長荐健。 經(jīng)常有香客問我,道長琳袄,這世上最難降的妖魔是什么江场? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮挚歧,結(jié)果婚禮上扛稽,老公的妹妹穿的比我還像新娘。我一直安慰自己滑负,他們只是感情好在张,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布用含。 她就那樣靜靜地躺著,像睡著了一般帮匾。 火紅的嫁衣襯著肌膚如雪啄骇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天瘟斜,我揣著相機(jī)與錄音缸夹,去河邊找鬼。 笑死螺句,一個胖子當(dāng)著我的面吹牛虽惭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蛇尚,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼芽唇,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了取劫?” 一聲冷哼從身側(cè)響起匆笤,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谱邪,沒想到半個月后炮捧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡惦银,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年咆课,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扯俱。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡傀蚌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蘸吓,到底是詐尸還是另有隱情,我是刑警寧澤撩幽,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布库继,位于F島的核電站,受9級特大地震影響窜醉,放射性物質(zhì)發(fā)生泄漏宪萄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一榨惰、第九天 我趴在偏房一處隱蔽的房頂上張望拜英。 院中可真熱鬧,春花似錦琅催、人聲如沸居凶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽侠碧。三九已至抹估,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間弄兜,已是汗流浹背药蜻。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留替饿,地道東北人语泽。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像视卢,于是被迫代替她去往敵國和親踱卵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

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