一杠茬、說一下HTTP
- HTTP是應(yīng)用層的協(xié)議。
- 是基于TCP的瞭恰,所以也需要先建立TCP的連接屯曹,再發(fā)送HTTP的請(qǐng)求。
- HTTP的請(qǐng)求報(bào)文分成三部分惊畏,第一部分是請(qǐng)求行恶耽,第二部分是請(qǐng)求的首部,第三部分才是請(qǐng)求的正文實(shí)體陕截。
1驳棱、在請(qǐng)求行中批什,標(biāo)明了HTTP的版本农曲、URL,還有方法驻债。
? a.方法最常用的有GET乳规,就是從服務(wù)端中獲取一些資源。
? b.另一種方法就是POST合呐,它主動(dòng)向服務(wù)器推一些數(shù)據(jù)暮的,內(nèi)容一般放在正文中。
? c.還有一種方法是PUT淌实,就是向指定資源位置上傳最新內(nèi)容冻辩。
? d.還有一種是DELETE,用來刪除資源拆祈。
2恨闪、首部是key value的結(jié)構(gòu)。
? a.Accept-Charset放坏,表示客戶端可以接受的字符集咙咽,防止傳過來的是另外的字符集,從而導(dǎo)致亂碼淤年。
? b.Content-Type钧敞,表示正文的格式,比如說JSON麸粮。 - 瀏覽器會(huì)通過socket將HTTP請(qǐng)求報(bào)文交給傳輸層溉苛,通過網(wǎng)絡(luò)協(xié)議棧層層處理后,發(fā)送給相應(yīng)的服務(wù)器弄诲。
- HTTP的返回報(bào)文也分為三部分炊昆,狀態(tài)行、首部、正文實(shí)體凤巨。
1视乐、狀態(tài)行中,標(biāo)明了狀態(tài)碼敢茁、HTTP版本等信息佑淀。
? a.狀態(tài)碼反映了HTTP請(qǐng)求的結(jié)果。200表示成功彰檬,404表示服務(wù)器無(wú)法響應(yīng)這個(gè)請(qǐng)求伸刃。
2、首部是key value的數(shù)據(jù)結(jié)構(gòu)逢倍。
? a.里面也有Content-Type捧颅,表示正文的格式,比如是HTML還是JSON较雕。
二碉哑、說一下HTTP 2.0
- HTTP 2.0在HTTP 1.1的基礎(chǔ)上進(jìn)化。
- HTTP 1.1在每次通信時(shí)亮蒋,都需要攜帶完整的頭部信息扣典,HTTP 2.0對(duì)HTTP的頭進(jìn)行了壓縮,方法是將每次都需要攜帶的key value在兩端做一個(gè)索引表慎玖,相同的頭只發(fā)送索引表中的索引贮尖。
- HTTP 2.0將一個(gè)TCP連接分成多個(gè)流,每個(gè)流有自己的ID趁怔,而且流可以是客戶端發(fā)往服務(wù)端湿硝,也可以是服務(wù)端發(fā)給客戶端。流其實(shí)是一個(gè)虛擬的通道润努。
- HTTP 2.0還將傳輸信息分割成更小的消息和幀关斜,并采用二進(jìn)制格式編碼。比如說Header幀任连,傳輸Header的內(nèi)容蚤吹,Data幀,傳輸正文實(shí)體随抠。
- HTTP 1.1的請(qǐng)求是串行的裁着,下一個(gè)請(qǐng)求的發(fā)送需要等待上一個(gè)請(qǐng)求的相應(yīng);HTTP 2.0通過分流和拆解傳輸信息拱她,實(shí)現(xiàn)了在一個(gè)連接里二驰,客戶端和服務(wù)端可以同時(shí)發(fā)送多個(gè)請(qǐng)求或響應(yīng),且不用按照順序一對(duì)一對(duì)應(yīng)秉沼。
- 所以桶雀,HTTP 2.0也解決了隊(duì)首堵塞的問題矿酵,不需要使用多條TCP連接來實(shí)現(xiàn)并行請(qǐng)求和響應(yīng),減少了TCP連接數(shù)對(duì)于服務(wù)器性能的影響矗积。
三全肮、說一下HTTPS
- HTTPS就是在HTTP協(xié)議的基礎(chǔ)上,對(duì)通信進(jìn)行加密的協(xié)議棘捣。
- 加密的方式一般有非對(duì)稱加密和對(duì)稱加密辜腺。
1、對(duì)稱加密乍恐,指的是加密和解密使用的是同一個(gè)密鑰评疗。
2、非對(duì)稱加密茵烈,指的是加密和解密不使用同一個(gè)密鑰百匆。一把作為公開的公鑰,一把作為誰(shuí)也不能給的私鑰呜投。公鑰加密的信息加匈,只有私鑰能解,私鑰加密的信息宙彪,只有公鑰能解矩动。 - 對(duì)稱加密相比非對(duì)稱加密而言有巧,效率和性能都更好释漆。
- 所以HTTPS先用非對(duì)稱加密,使通信雙發(fā)約定好公鑰篮迎,然后在后續(xù)的大量數(shù)據(jù)通信中就使用這個(gè)公鑰來對(duì)稱加密男图。
a. 首先,客戶端會(huì)先向服務(wù)器打招呼甜橱,并傳給他自己的TSL層版本逊笆,可以使用的密碼套件,還有一個(gè)隨機(jī)數(shù)岂傲。client hello
b. 服務(wù)端收到后难裆,會(huì)返回一個(gè)消息,包括服務(wù)端選擇協(xié)議版本镊掖、加密套件壓縮算法乃戈,也發(fā)送給客戶端一個(gè)隨機(jī)數(shù)。server hello
c. 隨后亩进,服務(wù)端會(huì)發(fā)送他的證書給客戶端症虑。server certificate
d. 然后服務(wù)端表示自己發(fā)送信息結(jié)束了。server done
e. 客戶端收到證書后归薛,對(duì)證書進(jìn)行校驗(yàn)谍憔。使用瀏覽器中內(nèi)置的CA公鑰匪蝙,去解密服務(wù)端發(fā)來的證書。如果能成功习贫,說明是可信的逛球。客戶端也把自己的證書發(fā)給服務(wù)端進(jìn)行校驗(yàn)苫昌。client certificate
f. 客戶端又產(chǎn)生一個(gè)隨機(jī)數(shù)字pre-master需忿,用證書中的公鑰加密,再發(fā)給服務(wù)端蜡歹,并要求更改后續(xù)的加密方式屋厘。client key exchange
g. 在客戶端和服務(wù)端,通過剛剛發(fā)送和接收的三個(gè)隨機(jī)數(shù)月而,以及所選擇的密碼套件加密算法汗洒,生成相同的對(duì)稱密鑰。
h. 然后客戶端發(fā)消息表示父款,以后就用對(duì)稱密鑰傳輸了溢谤。change cipher spec
i. 然后使用協(xié)商好的對(duì)稱密鑰,發(fā)一些參數(shù)給服務(wù)端用于數(shù)據(jù)和握手驗(yàn)證憨攒。Encypted Handshake Message
j. 服務(wù)端也向客戶端表示世杀,以后使用對(duì)稱加密傳輸。change cipher spec
k. 然后使用對(duì)稱密鑰發(fā)參數(shù)給客戶端肝集。Encypted Handshake Message
四瞻坝、數(shù)字證書
- 數(shù)字證書是由權(quán)威部門CA頒發(fā)的。
- 證書里面有公鑰杏瞻、證書所有者所刀、證書有效期、發(fā)布機(jī)構(gòu)等信息捞挥,就像身份證一樣浮创。
- 服務(wù)器可以向CA進(jìn)行證書申請(qǐng),然后CA會(huì)用私鑰給證書進(jìn)行簽名砌函。
- 客戶端獲得服務(wù)器的CA證書后斩披,可以使用CA的公鑰對(duì)其解密。