JavaScript--淺談Http與Tcp


HTTP是一個客戶端服務器端請求和應答的標准(TCP)。

也就是說,TCP是實現,而HTTP是使用TCP的一種標准。

Http發展歷程:

Http0.9:

只支持get方法,服務器只能回應HTML格式的字符串,服務器發送完就關閉TCP連接。

HTTP1.0:

支持get,head,post方法,每個TCP連接只能發送一個請求,為了復用TCP請求,可以使用非標准的方法,connetction:keep-alive

HTTP1.1:

默認支持connetction:keep-alive,同一TCP連接中,如果有多個請求,服務器只能處理最先的請求,才會處理下一個請求,如果最先的請求比較耗時,后面的請求就會阻塞。

HTTP2.0:

復用TCP並且可以發送多個請求和回應,不用按照請求順序進行處理。如果同一個TCP連接中有多個請求,服務器會將耗時比較多的請求,將處理好的部分發送,去處理下一個請求,處理完后再去處理耗時較多的。

 

說完了HTTP,再說說TCP

面試必備:

三次握手和四次揮手

三次握手(建立TCP連接):

1.建立新連接,客戶端發送一個包到服務器,等待服務器確定。

2.服務器收到客戶端的包,回應客戶端這個包加上一個新的包。

3.客戶端收到服務器的2個包,向服務端發送2個包的加密(1個包),客戶端與服務器進入連接成功的狀態

 

四次揮手(釋放TCP連接):

1.客戶端發出釋放請求(FIN)

2.服務器收到客戶端的釋放請求(FIN),通知應用進程,進入半關閉狀態,此時,服務器還是可以發送數據的,客戶端還要接受,同時發送關閉確認請求(ACK),客戶端收到服務器的確認請求(ACK)等待服務器發送最后的數據以及釋放請求(FINI)

3.服務器把最后的數據發送完后,向客戶端發送釋放請求(FIN)

4.客戶端收到服務器的釋放請求(FIN),發送服務器確認請求(ACK),服務器收到確定關閉請求(ACK)后,關閉TCP,客戶端等一段時間后關閉連接。

 

為什么要四次揮手,而不是三次?

答:根本原因是,一方發送FIN只表示自己發完了所有要發的數據,但還允許對方繼續把沒發完的數據發過來。

        舉個例子:A和B打電話,通話即將結束后,A說“我沒啥要說的了”,B回答“我知道了”,但是B可能還會有要說的話,A不能要求B跟着自己的節奏結束通話,於是B可能又巴拉巴拉說了一通,最后B說“我說完了”,A回答“知道了”,這樣通話才算結束。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM