對TCP/IP以及HTTP的知識實在太混亂,有些方面存在盲點,故整理了相關知識點。
TCP/IP協議模型:瀏覽器
對端傳輸:
緩存
注:SYN: 同步序列號;Seq:發送序號;ACK:確認字符安全
一握手 : 客戶端向服務端發送請求報文段,SYN爲1,Seq 爲X,隨後進入SYN_SEND服務器
二握手 : 服務的接收請求報文,發送ACK:x+1,SYN:1,Seq : Y。隨後進入SYN_RECVpost
三握手 : 向服務器發送Seq+ACK報文,發送完畢後客戶端和服務器端都進入ESTABLISHED狀態,完成TCP三次握手。編碼
第三次握手在理論上是能夠徹底省略的,在第二次握手服務器詢問客戶端是否準備好時就應該創建鏈接。那爲何要存在第三次握手呢?3d
爲了防止已失效的鏈接請求報文段忽然又傳送到了服務端,於是產生錯誤。產生緣由主要是由於客戶端第一次握手請求在某種狀況下延誤到鏈接釋放後纔到達服務段,若是隻使用兩次握手這時鏈接已經創建,但這個鏈接永遠不會使用,也不會釋放,server的不少資源就白白浪費掉了。代理
第二次揮手: 主機2收到了主機1發送的FIN報文段,向主機1回一個ACK報文段,Acknowledgment Number爲Sequence Number加1;主機1進入FIN_WAIT_2狀態;主機2告訴主機1,我「贊成」你的關閉請求;cdn
第三次揮手: 主機2向主機1發送FIN報文段,請求關閉鏈接,同時主機2進入LAST_ACK狀態;server
第四次揮手: 主機1收到主機2發送的FIN報文段,向主機2發送ACK報文段,而後主機1進入TIME_WAIT狀態;主機2收到主機1的ACK報文段之後,就關閉鏈接;此時,主機1等待2MSL後依然沒有收到回覆,則證實Server端已正常關閉,那好,主機1也能夠關閉鏈接了。
TCP協議是一種面向鏈接的、可靠的、基於字節流的運輸層通訊協議。TCP是全雙工模式,這就意味着,當主機1發出FIN報文段時,只是表示主機1已經沒有數據要發送了,主機1告訴主機2,它的數據已經所有發送完畢了;可是,這個時候主機1仍是能夠接受來自主機2的數據;當主機2返回ACK報文段時,表示它已經知道主機1沒有數據發送了,可是主機2仍是能夠發送數據到主機1的;當主機2也發送了FIN報文段時,這個時候就表示主機2也沒有數據要發送了,就會告訴主機1,我也沒有數據要發送了,以後彼此就會愉快的中斷此次TCP鏈接。
請求行(Request line)分爲三個部分:請求方法、請求地址和協議版本
先引入反作用和冪等的概念。
反作用指對服務器上的資源作改變,搜索是無反作用的,註冊是反作用的。
冪等指發送 M 和 N 次請求(二者不相同且都大於1),服務器上資源的狀態一致。註冊10個和11個賬號是不冪等的,對文章進行更改10次和11次是冪等的。
在規範的應用場景上說,Get 多用於無反作用,冪等的場景,例如搜索關鍵字。Post 多用於反作用,不冪等的場景,例如註冊。
在技術上說: