HTTP協議
HTTPS與網絡安全
TCP/UDP
DNS
session和cookie
HTTP協議
超文本傳輸協議
- 請求/響應報文
- 連接建立流程
- HTTP特點
請求報文
get沒有主體 post有主體
響應報文
HTTP的請求方式有哪些?
GET POST HEAD PUT DELETE OPTIONS
GET和POST方式的區別?
- GET請求參數以?分割拼接到URL后面的,post請求參數在主體里面。
- GET請求長度是2048個字符,POST一般沒有限制
- GET請求安全,POST不安全
標準答案 = 從語義的角度
- GET : 獲取資源
安全的 冪等的 可緩存的 - POST: 處理資源
不安全的 不冪等的 不可緩存的
安全性
不引起server推斷的任何狀態變化
GET HEAD POST
冪等性
同一個請求方法執行多次和執行一次效果是完全相同的
GET PUT DELETE
可緩存性
請求能否被緩存
GET HEAD
狀態碼
- 1xx
- 2xx: 成功
- 3xx :重定向
- 4xx :客戶端請求有問題
- 5xx: server端有異常
HTTP協議連接流程
- 三次握手建立連接
- 在連接上面進行HTTP數據的請求和HTTP響應傳遞
- 四次揮手釋放連接
為什么是三次握手和四次揮手?
HTTP的特點
- 無連接
HTTP的持久連接連接方案補償 - 無狀態
同一個用戶,server是不知道的
Coojie/Session技術補償
持久連接
為了提升效率,重復使用連接- 頭部字段
connection: Keep-alive
time:20
max: 10 - 怎么判斷一個球球是否結束?
content-length:1024客戶端響應理由
chunked,多個塊每個報文有一個chunked,結束后最后一個是空的chunked
Charles抓包原理
中間人攻擊HTTPS與網絡安全
HTTP與HTTPS區別
HTTPS = HTTP + SSL/TLS(安全模塊)
HTTPS是安全的HTTP是SSL/TLS應用層之下傳輸層之上 這個模塊保證
會話秘鑰
會話秘鑰 = random S + random C + 預主秘鑰
HTTPS用了那些加密手段?為什么?
- 連接建立過程中用非對稱加密,非對稱加密是很耗時的
公鑰 私鑰 - 后續傳遞過程中是用對稱加密的
非對稱加密
對稱加密
對稱加密會被中間人截獲,因為要傳遞
TCP和UDP
傳輸層的協議
TCP是傳輸層控制協議
UDP是用戶數據報協議
UDP (戶數據報協議)
- 無連接: 發送數據報,不用建立和釋放連接
- 盡最大努力交付: 不保證可靠傳輸
- 面向報文
UDP用戶數據報功能
-
復用、分用
多端口復用和分用 -
差錯檢測
TCP
TCP特點
- 面向連接
- 可靠傳輸
- 面向字節流
- 流量控制
- 擁塞控制
TCP面向連接
傳輸前建立連接
三次握手
傳輸后釋放連接
四次揮手
- 為什么不是兩次呢?
SYN同步報文超時或者丟失后,超時之后逗留在網絡環境中,這個時候會發生超時重傳,收到后server會回復一個確認的報文。如果是兩次握手,這個時候TCP連接已經建立了,假設剛才逗留的超時報文過來了,這個時候Server會以為又要建立一個。通過ACK就能辨別是不是超時重復的請求。 -
為什么是四次揮手
因為通道是全雙通的,雙向可以發送回復,才需要雙方面的關閉。
TCP 可靠傳輸
- 無差錯
- 不丟失
- 不重復
-
按序到達
無差錯情況
TCP面向字節流
對比UDP面向報文
TCP流量控制
滑動窗口協議
TCP擁塞控制
慢開始、擁塞避免
快恢復、快重傳
快恢復、快重傳不回到慢開始的步驟
DNS解析
你了解DNS解析嗎?過程是怎么樣的?
域名到IP地址的一個映射,DNS解析請求采用UDP數據報,而且是明文的
DNS解析的查詢方式
-
遞歸查詢
“我去給你問一下”
遞歸查詢 -
迭代查詢
“我告訴你誰可能知道”
迭代查詢 -
DNS劫持
明文被竊聽
DNS劫持 DNS劫持和HTTP關系沒有關系的
DNS解析發生在HTTP建立之前
DNS解析請求使用UDP數據報,端口號是53
DNS解析轉發
怎么解決DNS劫持?
-
httpDNS
使用HTTP協議向DNS服務器的53端口進行請求
使用DNS協議向DNS服務器的53端口進行請求
??
httpDNS - 長連接
避免公網
長連接
Session/Cookie
HTTP無狀態特點補償
HTTP Cookie
-
Cookie是用來記錄用戶狀態的,用來區分用戶的,狀態保存在客戶端
怎么修改cookie呢?
新cookie覆蓋舊cookie
覆蓋規則:name、path、domain等要和原cookie一致怎么刪除cookie呢?
新cookie覆蓋舊cookie
覆蓋規則:name、path、domain等要和原cookie一致
設置cookie的expires = 過去的某個時間 或者 maxAge = 0怎么保證Cookie的安全
對cookie進行加密處理 (加密也會被腳本共計)
只在https上攜帶cookie
設置cookie為httpOnly,防止腳本工資
HTTP Session
- Cookie是用來記錄用戶狀態的,用來區分用戶的,狀態保存在服務端
- Session要以來cookie機制
網絡相關面試總結
HTTP的get和set的區別?(語義角度)
HTTPS建立的流程是什么樣的?(時序圖 機密和證書)
TCP和UDP的區別?(特點)
TCP慢開始?(擁塞控制)
怎么避免DNS劫持?(兩種)