http協議簡述以及三次揮手四次握手
面試過程中經常容易被問到的http協議,今天進行了總結
HTTP協議簡介
HTTP協議就是超文字傳輸協議(HyperText Transfer Protocol),通俗理解是瀏覽器和web伺服器傳輸資料格式的協議,HTTP協議是一個應用層協議。
HTTP協議是基於TCP協議的,傳送資料之前需要建立好連線
HTTP是全球資訊網的資料通訊的基礎。設計HTTP最初的目的是為了提供一種釋出和接收HTML頁面<網頁>的方法。
HTTP協議的製作者是蒂姆·伯納斯-李,他供職於CERN(歐洲核子研究組織)
- 1991年釋出的0.9版,該版本極其簡單,只有一個GET請求方法
- 1996年5月,HTTP/1.0版本釋出
- 1997年1月,HTTP/1.1版本釋出,目前使用就是HTTP/1.1版本
HTTP的操作過程
1、瀏覽器分析指向頁面的URL
2、瀏覽器向DNS系統請求解析域名所對應的伺服器IP地址
3、DNS系統解析出伺服器的IP,並返回給主機
4、瀏覽器與該伺服器的程序建立TCP連結(三次握手,埠預設為80)
標誌位:SYN: 表示連線請求 ACK: 表示確認 FIN: 表示關閉連線 seq:表示報文序號 ack: 表示確認序號
- a、第一次握手:Client將標誌位SYN置為1,隨機產生一個值seq=J,並將該資料包傳送給Server,Client進入SYN_SENT狀態,等待Server確認。
- b、第二次握手:Server收到資料包後由標誌位SYN=1知道Client請求建立連線,Server將標誌位SYN和ACK都置為1,ack (number )=J+1,隨機產生一個值seq=K,並將該資料包傳送給Client以確認連線請求,Server進入SYN_RCVD狀態。
- c、第三次握手:Client收到確認後,檢查ack是否為J+1,ACK是否為1,如果正確則將標誌位ACK置為1,ack=K+1,並將該資料包傳送給Server,Server檢查ack是否為K+1,ACK是否為1,如果正確則連線建立成功,Client和Server進入ESTABLISHED狀態,完成三次握手,隨後Client與Server之間可以開始傳輸資料了。
5、瀏覽器發出HTTP請求:如GET /details/index.html
6、伺服器收到請求並作出相應處理,把檔案index.html傳送給瀏覽器
7、釋放TCP連結(四次握手)
- a、第一次揮手:Client傳送一個FIN,用來關閉Client到Server的資料傳送。
- b、第二次揮手:Server收到FIN後,傳送一個ACK給Client,確認序號為收到序號+1
- c、第三次揮手:Server傳送一個FIN,用來關閉Server到Client的資料傳送。
- d、第四次揮手:Client收到FIN後,接著傳送一個ACK給Server,確認序號為收到序號+1。
8、瀏覽器解析index.html檔案,將web頁顯示出來。
HTTP協議的特點:
在HTTP/1.0中, 預設使用的是短連線.也就是說, 瀏覽器和伺服器每進行一次HTTP操作, 就建立一次連線, 但任務結束就中斷連線.如果客戶端瀏覽器訪問的某個HTML或其他型別的 Web 頁中包含有其他的Web資源,如js檔案、影象檔案、CSS檔案等;當瀏覽器每遇到這樣一個Web資源,就會建立一個HTTP會話。
但從 HTTP/1.1起,預設使用長連線,用以保持連線特性。使用長連線的HTTP協議,會在響應頭有加入這行程式碼:
Connection:keep-alive
TCP長短連線的優缺點:
-
長連線可以省去較多的TCP建立和關閉的操作,節約時間。但是如果使用者量太大容易造成伺服器負載過高最終導致服務不可用
- 短連線對於伺服器來說實現起來較為簡單,存在的連線都是有用的連線,不需要額外的控制手段。但是如果使用者訪問量很大, 往往可能在很短時間內需要建立大量的連線,造成伺服器響應速度過慢
HTTP請求報文中常見的方法:
請求方法 | 意義 |
GET | 請求獲取由URL所標誌的資訊 |
POST | 給伺服器新增資訊 |
HEAD | 請求讀取由URL所標誌的資訊的首部 |
CONNECT | 用於代理伺服器 |
完結!(*^▽^*)