HTTP
超文本傳輸協(xié)議
請求報文格式

響應報文格式

常用的請求方式
POST GET HEAD PUT DELETE OPTIONS
POST 與 GET的區(qū)別
POST:非安全、非冪等、不可緩存
GET:安全的、冪等的、可緩存
- 安全的:不引起服務端任何狀態(tài)變化。有:
GET、HEAD、OPTIONS - 冪等的:一次請求與多次執(zhí)行結(jié)果相同。有:
GET、PUT、DELETE - 可緩存:請求可以在網(wǎng)絡路徑上去緩存。有:
GET、HEAD
狀態(tài)碼
常見狀態(tài)碼
1XX-
2XX:200請求成功 -
3XX:301,302網(wǎng)絡重定向 -
4XX:401,404一般表示請求可能存在問題 -
5XX:502,501一般表示服務端存在異常
完整的HTTP過程

HTTP請求會先三次握手建立TCP連接,然后發(fā)送HTTP請求,與接收響應,最后四次揮手斷開連接。
HTTP特點
無連接,無狀態(tài)
1.無連接:每次連接只處理一個請求,一次應答完畢后斷開連接。
解決方案:HTTP持久連接。
頭部字段
Connection:keep-alive 是否采用持久連接
time:10 連接持續(xù)時間
max:10 做多發(fā)生多少次HTTP請求
判斷持久連接結(jié)束
Content-Length長度
chunked是否為空,為空結(jié)束
-
無狀態(tài):對于交互場景沒有記憶能力。
解決方案:cookie/session
Charles抓包原理
中間人攻擊:
中間設備截獲客戶端的HTTP請求,假裝客戶端像服務端請求,獲取到服務端的響應,再返回給客戶端。中間人可以對請求與響應進行修改再進行發(fā)送。

HTTPS
HTTPS = HTTP+SSL/TLS
HTTPS是安全的HTTP,安全是由SSL/TLS(應用層之下,傳輸層之上)的協(xié)議保證的。
HTTPS連接建立流程

- 客戶端將TLS版本號,支持的加密算法列表,隨機數(shù)C傳給服務端。
- 服務端從支持的算法列表中確定加密算法,帶上隨機數(shù)S與證書返給客戶端。
- 客戶端驗證證書。
- 客戶端將隨機數(shù)C,隨機數(shù)S,預主秘鑰等組裝會話秘鑰。
- 客戶端通過公鑰對預主秘鑰加密,傳輸給服務端。
- 服務端通過私鑰解密預主秘鑰。
- 服務端組裝會話秘鑰。
- 客戶端與服務端發(fā)送加密的握手消息,驗證通道連接。
會話秘鑰:對稱加密中使用。
HTTPS使用的加密手段
- 對稱加密: 后續(xù)通訊過程中使用。
服務端與客戶端使用相同的公鑰進行加密解密。 - 非對稱加密: 連接建立過程中使用。
客戶端通過公鑰加密與解密。
服務端通過私鑰加密與解密。
TCP與UDP
TCP與UDP區(qū)別
UDP
特點:無連接,盡最大努力交付,面向報文。
功能:復用、分用、差錯檢測
TCP
特點:面向連接、可靠傳輸、面向字節(jié)流、流量控制、擁塞控制
- 面向連接:傳輸前需要建立連接,三次握手;傳輸結(jié)束,斷開連接,四次握手。
三次握手
- 客戶端發(fā)送握手信號SYN
- 服務端接收到握手信號SYN,發(fā)送SYN與確認信號ACK
- 客戶端發(fā)送確認信號ACK
四次揮手 - 客戶端發(fā)送結(jié)束信號FIN
- 服務端發(fā)送確認信號ACK
- 客戶端接收到確認信號ACK,斷開客戶端到服務端的連接
- 服務端發(fā)送結(jié)束信號FIN與確認信號ACK
- 客戶端發(fā)送確認信號ACK
- 服務端接收到確認信號斷開服務端到客戶端的連接
- 可靠傳輸:信號無差錯、不丟失、不重復、按序到達
- 流量控制:對傳輸?shù)淖止?jié)流大小進行控制。
- 擁塞控制: 慢開始、擁塞避免;快恢復、快重傳
為什么要三次握手、四次揮手
-
三次握手
如果第一次SYN超時,客戶端會觸發(fā)超時重傳,發(fā)送新的SYN,如果這是連接成功,超時的SYN這時到達服務端,服務端會認為客戶端又想建立一個新的連接,如果只有兩次握手,就會建立兩個連接。而三次握手,客戶端就可以忽略第二次的握手信號,避免重復建立連接。-
- 四次握手
TCP的連接通道是全雙工的,需要分別斷開兩個端點的連接。
如何保障可靠傳輸
-
超時重傳
超時重傳
客戶端在一定時間范圍內(nèi),未收到確認信號,就會重傳報文。
-
確認丟失、確認遲到
確認丟失、確認遲到
確認信號因為網(wǎng)絡原因未到達客戶端,客戶端再次發(fā)送相同報文,服務端會對重復報文進行丟棄,并重新發(fā)送確認信號。當舊的確認信號又到達后,客戶端繼續(xù)現(xiàn)有操作,忽略這個確認信號。
流量控制實現(xiàn)
滑動窗口協(xié)議
擁塞控制實現(xiàn)

- 從發(fā)送1個數(shù)據(jù)包開始,指數(shù)增長
- 達到設定閾值后,線性增長傳送包的大小
-
當數(shù)據(jù)超時后,將閾值設為該值的一半重新開始
快恢復
當超時后,將閾值設為一半,開始線性增長
DNS
DNS查詢方式
遞歸查詢

逐級向上查找
迭代查找

去可能有的服務器查找
DNS劫持
DNS劫持與HTTP無關(guān)。
DNS解析發(fā)生在HTTP之前。
DNS解析使用UDP數(shù)據(jù)報,端口號53

發(fā)送錯誤的ip,訪問錯誤的網(wǎng)站
解決DNS劫持
httpDNS:使用HTTP協(xié)議向DNS服務器請求,80端口,不使用53端口。
長連接



