HTTP请求/响应原理
一:什么是HTTP協議?
超文本傳輸協議?(HyperText?Transfer?Protocol),一個基于請求與響應,無狀態的,應用層的協議,常基于TCP/IP協議傳輸數據。?目的是保證客戶端與服務器之間的高校通信。
二:工作原理
客戶端(瀏覽器)向服務器提交?HTTP?請求,服務器向客戶端返回響應信息。
具體步驟:
三:TCP連接
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TCP三次握手
過程: ??
1.客戶端發送SYN(SEQ=x)報文給服務器端,進入SYN_SEND狀態。
2.服務器端收到SYN報文,回應一個SYN?(SEQ=y),ACK(ACK=x+1)報文,進入SYN_RECV狀態。
3.客戶端收到服務器端的SYN報文,回應一個ACK(ACK=y+1)報文,進入Established狀態。
??
為什么要三次握手?
一次握手:客戶端無法確認是否能夠和服務器正常通信,卻一直發連接請求是毫無意義的。
兩次握手:1.客戶端發一條連接請求給服務器,由于網絡阻塞,服務器未收到。
2.客戶端等了一段時間,服務器仍未回應它,于是再次發出連接請求,服務器收到請求并進行確認,TCP連接建立,開始通信,通信結束后釋放連接。客戶端進入CLOSED狀態。
3.此時服務端收到失效的連接請求,并向客戶端確認,但客戶端已關閉,服務端將會為連接請求分配資源并且一直等待下去,浪費了服務端連接資源。
四次握手:三次握手已經能夠建立連接,期間服務器有一次確認連接請求的操作就已足夠,沒必要進行多次確認,對于資源來說是一種浪費。
四:釋放TCP連接
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?TCP四次揮手
過程:
1.數據發送完畢后,客戶端發送釋放連接請求(FIN=1,seq=u?)并進入FIN-WAIT-1狀態。
2.服務器收到釋放連接請求,做出應答(?ACK=1,seq=v,ack=u+1.),并進入CLOSE-WAIT狀態。(此時客戶端處于FIN-WAIT-2狀態不發送只接收數據,此時仍在接收服務器傳輸的數據)
3.服務器發送完所有數據后發送釋放連接請求(FIN=1,ACK=1,seq=w,ack=u+1),并進入LAST-ACK狀態。
4.客戶端收到釋放連接請求后發送確認應答(ACK=1,seq=u+1,ack=w+1),并進入TIME-WAIT狀態.該狀態會持續2MSL時間(服務器收到應答會立即進入CLOSED狀態),若該時間段內沒有收到重發請求,就進入CLOSED狀態。
?
A:為什么四次揮手?
建立連接時,?服務器收到建立連接請求的SYN報文后,把ACK和SYN放在一個報文里發送給客戶端。?而釋放連接,服務器接收到客戶端的FIN報文時,表示客戶端不再發送但還能接收數據,此時服務器未必將全部數據都發送給了客戶端,因此會先發送ACK報文進入CLOSE-WAIT狀態,待發送完所有數據后,再發送FIN報文給客戶端表示同意關閉連接(ACK和FIN一般都會分開發送),從而導致多了一次。
B:為什么客戶端發完第四次揮手后需要持續2MSL時間后才會關閉?
如果客戶端發完第四次揮手立即關閉:
第一,若最后一個ACK報文丟失,服務器收不到客戶端的應答,會再次發送一個釋放連接請求,而此時客戶端已經關閉,服務器會一直等待并發送請求。
第二,若在此次連接中出現“已經失效的連接請求報文段”,下次建立的TCP連接中就會出現舊連接的請求報文(若客戶端發送完第四次揮手后,在2MSL時間后關閉,此段時間內可以使本次連接內產生的所有報文段從網絡中消失,下次建立的TCP連接中就不會出現舊連接的請求報文)。
?
?
?
總結
以上是生活随笔為你收集整理的HTTP请求/响应原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【毕业设计/Matlab系列】基于mat
- 下一篇: SQLCODE 错误对照表