HTTP
超文本傳輸協(xié)議
請(qǐng)求報(bào)文格式
響應(yīng)報(bào)文格式
常用的請(qǐng)求方式
POST
GET
HEAD
PUT
DELETE
OPTIONS
POST 與 GET的區(qū)別
POST
:非安全僧界、非冪等、不可緩存
GET
:安全的、冪等的猜揪、可緩存
- 安全的:不引起服務(wù)端任何狀態(tài)變化而姐。有:
GET
拴念、HEAD
褐缠、OPTIONS
- 冪等的:一次請(qǐng)求與多次執(zhí)行結(jié)果相同队魏。有:
GET
、PUT
瞬雹、DELETE
- 可緩存:請(qǐng)求可以在網(wǎng)絡(luò)路徑上去緩存挖炬。有:
GET
状婶、HEAD
狀態(tài)碼
常見狀態(tài)碼
1XX
-
2XX
:200
請(qǐng)求成功 -
3XX
:301
,302
網(wǎng)絡(luò)重定向 -
4XX
:401
,404
一般表示請(qǐng)求可能存在問題 -
5XX
:502
,501
一般表示服務(wù)端存在異常
完整的HTTP過程
HTTP請(qǐng)求會(huì)先三次握手建立TCP連接,然后發(fā)送HTTP請(qǐng)求,與接收響應(yīng),最后四次揮手?jǐn)嚅_連接草姻。
HTTP特點(diǎn)
無連接
,無狀態(tài)
1.無連接
:每次連接只處理一個(gè)請(qǐng)求,一次應(yīng)答完畢后斷開連接撩独。
解決方案:HTTP持久連接综膀。
頭部字段
Connection:keep-alive
是否采用持久連接
time:10
連接持續(xù)時(shí)間
max:10
做多發(fā)生多少次HTTP請(qǐng)求
判斷持久連接結(jié)束
Content-Length
長(zhǎng)度
chunked
是否為空,為空結(jié)束
-
無狀態(tài)
:對(duì)于交互場(chǎng)景沒有記憶能力剧劝。
解決方案:cookie/session
Charles抓包原理
中間人攻擊:
中間設(shè)備截獲客戶端的HTTP請(qǐng)求,假裝客戶端像服務(wù)端請(qǐng)求,獲取到服務(wù)端的響應(yīng),再返回給客戶端讥此。中間人可以對(duì)請(qǐng)求與響應(yīng)進(jìn)行修改再進(jìn)行發(fā)送谣妻。
HTTPS
HTTPS
= HTTP
+SSL/TLS
HTTPS
是安全的HTTP
,安全是由SSL/TLS
(應(yīng)用層
之下,傳輸層
之上)的協(xié)議保證的他巨。
HTTPS連接建立流程
- 客戶端將TLS版本號(hào),支持的加密算法列表,隨機(jī)數(shù)C傳給服務(wù)端闻蛀。
- 服務(wù)端從支持的算法列表中確定加密算法,帶上隨機(jī)數(shù)S與證書返給客戶端。
- 客戶端驗(yàn)證證書役衡。
- 客戶端將隨機(jī)數(shù)C,隨機(jī)數(shù)S,預(yù)主秘鑰等組裝會(huì)話秘鑰。
- 客戶端通過公鑰對(duì)預(yù)主秘鑰加密,傳輸給服務(wù)端俐芯。
- 服務(wù)端通過私鑰解密預(yù)主秘鑰。
- 服務(wù)端組裝會(huì)話秘鑰吧史。
- 客戶端與服務(wù)端發(fā)送加密的握手消息,驗(yàn)證通道連接贸营。
會(huì)話秘鑰
:對(duì)稱加密中使用岩睁。
HTTPS使用的加密手段
- 對(duì)稱加密: 后續(xù)通訊過程中使用捕儒。
服務(wù)端與客戶端使用相同的公鑰進(jìn)行加密解密刘莹。 - 非對(duì)稱加密: 連接建立過程中使用。
客戶端通過公鑰加密與解密扇调。
服務(wù)端通過私鑰加密與解密肃拜。
TCP與UDP
TCP與UDP區(qū)別
UDP
特點(diǎn):無連接,盡最大努力交付,面向報(bào)文雌团。
功能:復(fù)用、分用猛蔽、差錯(cuò)檢測(cè)
TCP
特點(diǎn):面向連接曼库、可靠傳輸略板、面向字節(jié)流叮称、流量控制、擁塞控制
- 面向連接:傳輸前需要建立連接,三次握手;傳輸結(jié)束,斷開連接,四次握手娱节。
三次握手
- 客戶端發(fā)送握手信號(hào)SYN
- 服務(wù)端接收到握手信號(hào)SYN,發(fā)送SYN與確認(rèn)信號(hào)ACK
- 客戶端發(fā)送確認(rèn)信號(hào)ACK
四次揮手 - 客戶端發(fā)送結(jié)束信號(hào)FIN
- 服務(wù)端發(fā)送確認(rèn)信號(hào)ACK
- 客戶端接收到確認(rèn)信號(hào)ACK,斷開客戶端到服務(wù)端的連接
- 服務(wù)端發(fā)送結(jié)束信號(hào)FIN與確認(rèn)信號(hào)ACK
- 客戶端發(fā)送確認(rèn)信號(hào)ACK
- 服務(wù)端接收到確認(rèn)信號(hào)斷開服務(wù)端到客戶端的連接
- 可靠傳輸:信號(hào)無差錯(cuò)祭示、不丟失质涛、不重復(fù)蹂窖、按序到達(dá)
- 流量控制:對(duì)傳輸?shù)淖止?jié)流大小進(jìn)行控制。
- 擁塞控制: 慢開始横媚、擁塞避免;快恢復(fù)灯蝴、快重傳
為什么要三次握手穷躁、四次揮手
-
三次握手
如果第一次SYN超時(shí),客戶端會(huì)觸發(fā)超時(shí)重傳,發(fā)送新的SYN,如果這是連接成功,超時(shí)的SYN這時(shí)到達(dá)服務(wù)端,服務(wù)端會(huì)認(rèn)為客戶端又想建立一個(gè)新的連接,如果只有兩次握手,就會(huì)建立兩個(gè)連接问潭。而三次握手,客戶端就可以忽略第二次的握手信號(hào),避免重復(fù)建立連接狡忙。-
- 四次握手
TCP
的連接通道是全雙工的,需要分別斷開兩個(gè)端點(diǎn)的連接灾茁。
如何保障可靠傳輸
-
超時(shí)重傳
超時(shí)重傳
客戶端在一定時(shí)間范圍內(nèi),未收到確認(rèn)信號(hào),就會(huì)重傳報(bào)文北专。
-
確認(rèn)丟失拓颓、確認(rèn)遲到
確認(rèn)丟失描孟、確認(rèn)遲到
確認(rèn)信號(hào)因?yàn)榫W(wǎng)絡(luò)原因未到達(dá)客戶端,客戶端再次發(fā)送相同報(bào)文,服務(wù)端會(huì)對(duì)重復(fù)報(bào)文進(jìn)行丟棄,并重新發(fā)送確認(rèn)信號(hào)画拾。當(dāng)舊的確認(rèn)信號(hào)又到達(dá)后,客戶端繼續(xù)現(xiàn)有操作,忽略這個(gè)確認(rèn)信號(hào)青抛。
流量控制實(shí)現(xiàn)
滑動(dòng)窗口協(xié)議
擁塞控制實(shí)現(xiàn)
- 從發(fā)送1個(gè)數(shù)據(jù)包開始,指數(shù)增長(zhǎng)
- 達(dá)到設(shè)定閾值后,線性增長(zhǎng)傳送包的大小
-
當(dāng)數(shù)據(jù)超時(shí)后,將閾值設(shè)為該值的一半重新開始
快恢復(fù)
當(dāng)超時(shí)后,將閾值設(shè)為一半,開始線性增長(zhǎng)
DNS
DNS查詢方式
遞歸查詢
逐級(jí)向上查找
迭代查找
去可能有的服務(wù)器查找
DNS劫持
DNS劫持與HTTP無關(guān)适室。
DNS解析發(fā)生在HTTP之前举瑰。
DNS解析使用UDP數(shù)據(jù)報(bào),端口號(hào)53
發(fā)送錯(cuò)誤的ip,訪問錯(cuò)誤的網(wǎng)站
解決DNS劫持
httpDNS:使用HTTP協(xié)議向DNS服務(wù)器請(qǐng)求,80端口,不使用53端口汽畴。
長(zhǎng)連接