HTTP
HTTP是一個超文本傳輸協(xié)議
構(gòu)成:請求報文&響應(yīng)報文
請求報文

響應(yīng)報文

HTTP首部字段
//判斷一個請求是否結(jié)束Content-Length 或者 chunked
Content-Length :1024
chunked //最后會有一個空的chunked
//允許在同一個tcp連接上發(fā)送多個http請求,但服務(wù)器必須按照順序應(yīng)答
Connection: keep-alive
timeout=20 //最多維持20s
max=100 // 最多100次請求后斷開
//
//http2后新增
使用二進制數(shù)據(jù)流,支持頭部壓縮
HTTP的請求方式有哪些?
GET POST HEAD PUT DELETE OPTIONS
GET和POST有什么區(qū)別?
GET和POST的區(qū)別?
GET用于獲取資源:安全、冪等、可緩存
POST用于處理資源:非安全、非冪等、不可緩存
安全:不引起服務(wù)端的任何變化
冪等:同一個請求方法執(zhí)行多次和執(zhí)行一次的效果完全相同。
可緩存:代理服務(wù)器上可以緩存結(jié)果
狀態(tài)碼有哪些?
1xx : 服務(wù)器收到請求
2xx:操作被成功接收并處理
3xx:重定向
4xx:客戶端錯誤
5xx:服務(wù)端錯誤
HTTP特點
無連接:建立連接后,又會釋放連接 (HTTP持久連接)
無狀態(tài):多次請求,不知道是否同一個用戶 (Cookie,Session)
HTTP建立連接的過程

Charles抓包原理

HTTPS
HTTPS是安全的HTTP,安全是在應(yīng)用層之下、傳輸層之上插入了SSL/TLS中間插件。HTTPS = HTTP + SSL/TLS

HTTPS連接建立流程

HTTPS使用了哪些加密手段
連接過程中使用了非對稱加密,非對稱加密很耗時
后續(xù)通信過程使用了對稱加密。


UDP
特點:
1 無連接
2 盡最大努力交付
3 面向報文(既不合并,也不拆分)
功能:
1 復(fù)用、分用
2 差錯檢測
TCP
特點
1 面向連接 : 三次握手,四次揮手
為什么是三次握手?
假設(shè)2次握手,client發(fā)送 syn = a 超時,此時超時重傳 syn = b,Server回應(yīng)了ack建立一次連接。 之后syn=a到達了Server,Server回應(yīng)了ack。那么就會建立2次連接。但是三次就不一樣。當超時的syn=a達到Server,Server回應(yīng)ack后,客戶端自己知道建立已經(jīng)連接,就不會再建立新的連接了。
為什么是四次揮手?
客戶端和服務(wù)端的連接通道是全雙工的。需要雙方面的連接和釋放
2 可靠傳輸
無差錯
不丟失
不重復(fù)
按序到達
3 面向字節(jié)流
4 流量控制
滑動窗口協(xié)議: App繼續(xù)發(fā)送數(shù)據(jù)時,Server接收窗口比較小,發(fā)送方窗口大,以更快的速率往后發(fā),需要由TCP窗口首部字段更改發(fā)送方的發(fā)送速率。
5 擁塞控制
慢開始,擁塞避免
快恢復(fù),快重傳。
x:交互次數(shù),輪詢次數(shù)
y: 窗口大小
報文次數(shù),窗口門限制前指數(shù)增加,門限值后,線性增長。若果發(fā)了網(wǎng)絡(luò)擁塞。重新慢開始,同時降低窗口

DNS
域名到IP地址映射,DNS解析請求采用UDP數(shù)據(jù)報,且明文

1 DNS解析查詢方式
遞歸查詢:我去給你問一下
迭代查詢:我告訴你誰可能知道


DNS劫持與HTTP的關(guān)系是怎樣的?
沒有關(guān)系,DNS解析發(fā)生在HTTP建立連接之前,DNS解析請求使用UDP數(shù)據(jù)報,端口53
2 DNS解析轉(zhuǎn)發(fā)?
就是本地DNS為了節(jié)省資源,把解析任務(wù)外包給其他的DNS服務(wù)器。
3 怎樣解決DNS劫持?
httpDNS : DNS是使用UDP數(shù)據(jù)報,明文請求53端口。改為使用HTTP協(xié)議向DNS服務(wù)器的80端口進行請求。
長連接:Client <----->長連接Server-------->APIServer

Session/Cookie
Cookie主要用來記錄用戶狀態(tài),區(qū)分用戶;狀態(tài)保存在客戶端。
客戶端發(fā)送cookie在http請求報文的Cookie首部字段中
服務(wù)端設(shè)置http響應(yīng)報文的Set-Cookie首部字段

怎樣保證Cookie安全?
對Cookie加密處理
只在https攜帶Cookie
設(shè)置Cookie為httpOnly,防止跨站腳本攻擊
Session

Session主要用來記錄用戶狀態(tài),區(qū)分用戶;狀態(tài)存放在服務(wù)器端。
Session需要依賴Cookie實現(xiàn)。
總結(jié)
http GET POST區(qū)別?
HTTPS鏈接建立流程?
TCP UDP區(qū)別?
TCP慢開始?
客戶端怎樣避免DNS劫持?