一篇比較全的HTTP協議詳解(1)

1.概念

 1.1 Web Service

  Web Service(Web服務)是我們日常使用最多的服務,所有網站都是以Web服務形式爲我們呈現。

  • Web服務分爲服務端客戶端
  • 常見的客戶端就是我們使用的各種瀏覽器(IE、Chorm、Safari、Firefox、Opera或命令行瀏覽器)都是Web客戶端。
  • 而Web服務端就是我們所訪問網站的Web服務。常見的Web服務器有:IIS、Apache、Nginx、Lighttpd等。不同Web服務器對不同的系統平臺,有各自的優缺點。

 1.2 HTTP協議

  超文本傳輸協議(HTTP)是一種通信協議。它允許將超文本標記語言(HTML)文檔從web服務器傳送到客戶端
  我們平時瀏覽網頁,只要在瀏覽器端輸入網址,電腦就能顯現出我們想要的東西。可是你有沒有想過,輸入網址之後到底發生了什麼呢?
  簡單來說,就是我們向服務器說:“嘿,哥們,我想要xxx”,服務器再把我們想要的東西發到我們電腦上顯現出來。我們向服務器申請資源的時候、服務器發給我們東西這個過程,是要遵從一定的協定的(沒有規矩,不成方圓),這個協定就是HTTP協議。
  也就是說,Wbe服務器和客戶端通過HTTP協議進行交互。

  • HTTP是一個應用層協議,由請求和響應構成,是一個標準的客戶端服務端模型(CS模型)。HTTP是一個無狀態的協議(下一章會講到)。
  • 在Internet中所有的傳輸都是通過TCP/IP進行的。HTTP協議作爲TCP/IP模型中應用層的協議也不例外。HTTP協議通常承載於TCP協議之上,有時也承載於TLS或SSL協議層之上,這個時候,就成了我們常說的HTTPS(HTTPS後面我會講到)。
  • 瀏覽網頁是HTTP的主要應用,但是這並不代表HTTP就只能應用於網頁的瀏覽。HTTP是一種協議,只要通信的雙方都遵守這個協議,HTTP就能有用武之地。比如咱們常用的QQ,迅雷這些軟件,都會使用HTTP協議(還包括其他的協議)。

2. 傳輸的過程

  HTTP協議(應用層)是承載於TCP協議(傳輸層)之上的。而TCP是一個端到端的面向連接的協議。所謂的端到端可以理解爲進程到進程之間的通信。所以HTTP在開始傳輸之前,首先需要建立TCP連接,而TCP連接的過程需要所謂的“三次握手”。下圖所示TCP連接的三次握手。

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

 PS:下面是一張非常棒的圖,對於TCP協議的理解很有幫助。雖然我們主要講的是三次握手,但是理解了三次握手,四次揮手也就很簡單了。
在這裏插入圖片描述

  • 第一次握手:建立連接。客戶端發送連接請求報文段,將SYN位置爲1,Seq爲x;然後客戶端進入SYN_SEND狀態,等待服務器的確認;
  • 第二次握手:服務器收到SYN報文段。服務器收到客戶端的SYN報文段,需要對這個SYN報文段進行確認,設置Ack爲x+1(Seq+1);同時,自己自己還要發送SYN請求信息,將SYN位置爲1,Seq爲y;服務器端將上述所有信息放到一個報文段(即SYN+ACK報文段)中,一併發送給客戶端,此時服務器進入SYN_RECV狀態;
  • 第三次握手:客戶端收到服務器的SYN+ACK報文段。然後將Ack設置爲y+1,向服務器發送ACK報文段,這個報文段發送完畢以後,客戶端和服務器端都進入ESTABLISHED狀態,完成TCP三次握手。

  在TCP三次握手之後,建立了TCP連接,此時HTTP就可以進行傳輸了
  四次揮手也和三次握手原理一樣,由於篇幅有限,在這裏就不再詳解。在計算機網絡專欄中我會詳細講解TCP/IP協議。

 2.2 HTTP報文

  HTTP報文由請求報文響應報文組成。HTTP的這兩種報文都由三部分組成:起始行首部實體主體
在這裏插入圖片描述

  2.2.1 起始行

請求報文起始行格式

方法 【空格】 URL 【空格】 HTTP版本

  • 方法: 向請求資源指定的資源發送請求報文的方法,其作用是可以指定請求的資源按期望產生某種行爲

  HTTP定義了許多方法,客戶端通過不同的方式於Web服務器進行通信,常見的方法如下:

GET 從服務器上獲取一個資源(一般是一個網頁)
POST 向服務器提交數據(可能會創建一個新的資源)
PUT 向服務器提交數據
DELETE 刪除指定資源
HEAD 只請求網頁頭部信息
  • URL : URL鏈接,定位資源位置
  • HTTP版本:目前有 HTTP/1.0、HTTP/1.1、HTTP/2.0 版本,其中 HTTP1.0 版本使用較廣泛。

響應報文起始行格式

HTTP版本 [空格] 狀態碼

  • 狀態碼:就是顯示給客戶端,服務端的狀態。例如:我們訪問網頁的時候經常會遇到404錯誤。常見的狀態碼及含義如下:
200 正常,請求成功
301 永久移動,一般用於域名重定向
304 未修改,一般用於緩存
401 禁止訪問,未授權
403 進制訪問,通常代表已通過認證,但沒有訪問權限
404 未找到資源
301 服務器內部錯誤
  2.2.2 首部(header)
  • 是用來說明瀏覽器、服務器或報文主體的一些信息。
  • 可以有好幾行,也可以不使用
  • 每個首部行都是由首部字段名、、 和值組成
  • 每個首部在結束地方都有一個空行,標誌首部結束
      HTTP 首部字段分爲 4 種: 通用首部字段請求首部字段響應首部字段實體首部字段
    一張圖展示所有字段:這裏不再逐個講解每個字段的意思,有興趣的可以自行上網搜索~~
    在這裏插入圖片描述
  2.2.3 實體(body)
  • 請求報文實體,就是客戶端具體想要的是什麼。
  • 響應報文的實體,就是客戶端想要的資源。

 2.3 瀏覽器演示

  我們使用Chorm瀏覽器,隨便打開一個網頁(例如:www.meizu.com),鼠標右擊,點擊【檢查】,就會出來以下界面,然後按順序點擊:Network—>www.meizu.com—>Headers,(如果沒看到,就對頁面重新加載
在這裏插入圖片描述
點擊進去,看看這些Headers。有沒有很熟悉?這就是我們剛剛說的HTTP報文。但是和上邊所說的還有點不一樣,別急,點擊 view source,顯示視圖源。(PS:因爲瀏覽器原本顯示的是 view parsed——視圖解析。意思是一樣的,區別在於一個是源,一個是解析過的。提示:有的網頁沒有view source這個選項)
在這裏插入圖片描述
點擊過後就是下面的圖片,就和我們剛剛說的報文一樣了。
在這裏插入圖片描述
響應報文實體就在後面的Response裏面。這裏只是給大家看一下HTTP報文的大概樣子,就不再具體詳解了。

3.HTTP協議發展歷史

HTTP/0.9:協議很簡單,只有一個命令GET,沒有HEADER等描述信息。服務器發送完畢就關閉TCP連接。
HTTP/1.0:

  • 增加了很多命令,例如:POST,HEAD,PUT等。
  • 增加了status code和header。
  • 多字符集支持、多部分發送、權限、緩存等。

HTTP/1.1:

  • 持久連接HTTP是無連接的,下一篇文章會講到)。
  • pipeline(管道化),pipeline機制是在一條connection上多個http request不需要等待response就可以連續發送的技術。但這可能會帶來隊頭阻塞的問題,也正因此,許多瀏覽器默認關閉了這個功能。(HTTP2解決了這個問題)。
  • 增加host和其他一些命令。Host是比較重要的東西,他的存在,是爲了實現一臺服務器上可以跑多個Web服務。例如:www.a1.com,www.a2.com,www.a3.com,這三個域名通過DNS翻譯出來的IP都一樣,但可以通過Host,來區分同一臺服務器上的不同的Web服務。

HTTP/2:

  • 所有數據以二進制傳輸。
  • 同一個連接裏面發送多個請求不再需要按照順序來。
  • 頭信息壓縮以及推送等提高效率的功能。

4. HTTP協議一個基本的工作流程

  一次HTTP操作稱爲一個事務,其工作過程大致可分爲四步:

  • 首先客戶端與服務端需要建立TCP連接。只要單擊某個超級鏈接,HTTP的工作開始
  • 建立連接後,客戶端發送一個請求給服務端,請求報文格式上邊已經提過。
  • 服務端接到請求後,會發送一個響應給客戶端,響應報文格式上邊已經提過。
  • 客戶端接收服務器所返回的信息通過瀏覽器顯示在用戶的顯示屏上,然後客戶機與服務器斷開連接。

  如果在以上過程中的某一步出現錯誤,那麼產生錯誤的信息將返回到客戶端,有顯示屏輸出。對於用戶來說,這些過程是由HTTP自己完成的,用戶只要用鼠標點擊,等待信息顯示就可以了。

5.總結

  以上就是對HTTP協議的初步講解,講的東西很少,就是希望大家先有個清晰的概念。後續我會接着寫,關於HTTP協議的一些重要特性,以及HTTPS等。
  文章如有不當之處,還請多多指教~如有疑問,可以留言區討論鴨!

發佈了15 篇原創文章 · 獲贊 36 · 訪問量 6628
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章