http是超文本傳輸協議,是客戶端瀏覽器或其餘程序與Web服務器之間的應用層通訊協議。在Internet上的Web服務器上存放的都是超文本信息, 客戶機須要經過HTTP協議傳輸所要訪問的超文本信息。HTTP包含命令和傳輸信息,不只可用於Web訪問,也能夠用於其餘因特網/內聯網應用系統之間的通訊,從而實現各種應用資源超媒體訪問的集成。編程
tcp(傳輸控制協議)是一種面向連接的、可靠的、基於字節流的傳輸層通訊協議。TCP創建須要三次握手,釋放須要4次揮手瀏覽器
什麼是三次握手緩存
所謂三次握手是指:創建tcp連接時,須要client與server發送三個包,確認連接的創建,這一過程由lcient執行connect觸發服務器
第一次握手socket
client將SYN設置爲1,seq=隨機值j,將數據包發送給server,進入SYN_SEND狀態,等待server確認
第二次握手tcp
server收到數據包由標誌位SYN=1知道,是請求創建連接,將ACK設置爲1,ack=j+1,做爲響應client的請求,將SYN設置爲1,seq=隨機值k,發送給client確認,erver進入SYN_RECV狀態,由於是創建連接這些數據在一個包中。
第三次握手post
client收到響應,檢查ACK=1?,ack=j+1?,若都符合,將ACK設置爲1,ack=k+1,發送給server,client進入establish狀態,server收到響應,檢查ACK=1?,ack=k+1?若都符合進入establish狀態,三次握手完成,TCP創建連接,開始通訊。
即終止TCP鏈接,就是指斷開一個TCP鏈接時,須要客戶端和服務端總共發送4個包以確認鏈接的斷開。在socket編程中,這一過程由客戶端或服務端任一方執行close來觸發測試
因爲TCP鏈接時全雙工的,所以,每一個方向都必需要單獨進行關閉,這一原則是當一方完成數據發送任務後,發送一個FIN來終止這一方向的鏈接,收到一個FIN只是意味着這一方向上沒有數據流動了,即不會再收到數據了,可是在這個TCP鏈接上仍然可以發送數據,直到這一方向也發送了FIN。首先進行關閉的一方將執行主動關閉,而另外一方則執行被動關閉網站
第一次揮手編碼
client發送一個FIN,用來關閉client到server的數據傳送,cliient進入FIN_WAIT_1狀態
第二次揮手
server收到FIN後,發送一個ack給client,確認序列號爲收到序列號+1(與SYN相同,一個FIN佔用一個序號),server進入CLOSE_WAIT狀態
第三次揮手
server發送一個FIN,用來關閉server到client的數據傳送,server進入LAST_ACK狀態
第四次揮手
client收到FIN後,client進入TIME_WAIT狀態,接着發送一個ack給server,確認序列號爲收到序列號+1,server進入CLOSED狀態,完成四次揮手
一個HTTP請求報文由請求行(request line)、請求頭部(header)、空行和請求數據4個部分組成
由請求方法字段、URL字段、協議版本字段三部分構成,它們之間由空格隔開。經常使用的請求方法有:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。
請求頭由key/value對組成,每行爲一對,key和value之間經過冒號(:)分割。請求頭的做用主要用於通知服務端有關於客戶端的請求信息。
典型的請求頭有:
空行
最後一個請求頭以後就是空行,用於告訴服務端如下內容再也不是請求頭的內容了。
請求內容主要用於POST請求,與POST請求方法配套的請求頭通常有Content-Type(標識請求內容的類型)和Content-Length(標識請求內容的長度)
HTTP響應報文由狀態行、響應頭、空行和響應內容4個部分構成。
由HTTP協議版本、狀態碼、狀態碼描述三部分構成,它們之間由空格隔開。
通常狀況下,響應頭會包含如下,甚至更多的信息。
對於響應端來說:close表示鏈接已經關閉。keeplive則表示鏈接保持中,能夠繼續處理後續請求。Keep-Alive表示若是請求端保持鏈接,則該請求頭部信息代表指望服務端保持鏈接多長時間(秒),例如300秒,應該這樣寫Keep-Alive: 300
空行
最後一個響應頭以後就是空行,用於告訴請求端如下內容再也不是響應頭的內容了。
服務端返回給請求端的文本信息。
URL:統一資源定位符
是Internet上資源的地址,能夠定義爲引用地址的字符串,用於指示資源的位置以及用於訪問它的協議。
URI:統一資源標識符
是標識邏輯或物理資源的字符序列,與URL相似,也是一串字符。經過使用位置,名稱或二者來標識Internet上的資源;它容許統一識別資源。