【讀】這一次,讓我們再深入一點 - HTTP概述

_高洋_發表於2018-01-03

【讀】這一次,讓我們再深入一點 - HTTP概述

這是關於網路系列的第四篇文章,接下來會有更多精彩內容.敬請期待! 讓我們一起乘風破浪!

前言

前面我們通過以下文章

分別對網際層的IP協議,運輸層的UDP和TCP協議進行了簡單的學習.從該篇開始, 我們學習應用層的HTTP協議.HTTP協議本身內容較為豐富, 希望你能通過該系列文章有所收穫.

本篇旨在理解HTTP客戶端伺服器互動過程,對其模型有大體瞭解,不做深入瞭解。你可以瞭解到一下內容:

  • Web客戶端於伺服器是如何通訊的
  • 表示Web內容的資源來自何方
  • Web事務是怎樣工作的
  • HTTP通訊所使用的報文格式
  • 底層TCP網路傳輸
  • HTTP協議演變
  • Web結構元件

內容

Web客戶端於伺服器是如何通訊的

先看下面一張通訊草圖:

客戶端伺服器通訊模型
可見,該通訊方式是,客戶端向伺服器傳送請求(Request),伺服器回送請求資料(Response),也就是請求應答模式。

表示Web內容的資源來自何方

資源可以是儲存在伺服器上的靜態檔案,如文字檔案、圖片檔案、影視檔案等;也可以是根據使用者身份生成的動態檔案,如個人的照片,線上商店購物訂單。

Web資源

  • 媒體型別 在如此眾多的資源中,HTTP為了解每種資源的型別,會對資源打上標籤,稱之為MIME type,在Web伺服器回送的資料中包含該內容。客戶端可以根據資源型別決定如何處理該資源。常見的MIME type有:

    • text/html HTML格式的文字型別
    • text/plain普通的ASCII文字型別
    • image/jpeg JPEG格式圖片型別
    • image/gif GIF格式的圖片型別
    • video/quicktime Apple公司QuickTime電影型別
    • application/vnd.ms-powerpoint 微軟PowerPoint檔案型別

    更多常見在這裡MIME type大全看這裡

  • URI 伺服器上的每一個資源,都會有自己的標識,稱為統一資源識別符號(Uniform Resource Identifier, URI),它可以在世界範圍內標識並定位資訊資源。

  • URL URLURI最常見的形式(另一種是下面討論的URN),稱為統一資源定位符。它描述了一臺伺服器上某資源的特定位置,可以精確的定位一個資源。如,http://www.baidu.com/image/girl.gif。大部分URL都遵循該格式,它包括下面幾個部分:

    • http:// 稱為方案(scheme),說明了訪問資源使用的協議型別,這裡通常是http://
    • www.baidu.com伺服器地址(說為域名更為合適),也可以使IP地址
    • 其餘部分指定了資源在伺服器的位置和名稱,也可以包含引數在最後,用?隔開。
  • URN URN是統一資源名,也是URI的一種。作為特定資源的唯一名稱使用,與資源的所在地無關。現階段,URN並未大範圍使用。

  • 在實際應用中,並沒有對URIURL進行特定區分。

Web事務是怎樣工作的

一個HTTP事務是由一條請求命令和一個響應結果組成。這種通訊通過HTTP報文的格式化資料塊進行。

  • 方法
    HTTP支援幾種不同的請求命令,這些命令稱為HTTP方法。每個HTTP請求都會包含一個方法,負責告訴伺服器執行什麼動作。常見的方法如下:

    HTTP方法 描述
    GET 告知伺服器,需要從伺服器向客戶端傳送命名資源
    PUT 將客戶端的資料儲存的命名的伺服器資源中
    DELETE 從伺服器刪除資源
    POST 將客戶端資料傳送到一個伺服器應用程式
    HEAD 僅傳送命名資源響應中的HTTP首部

    更詳細的介紹在後續文章中。

  • 狀態碼
    每條HTTP響應報文返回時都會攜帶狀態碼,告知客戶端是否請求成功,或者是否需要採取其他動作。常見的狀態碼:

    HTTP狀態碼 描述
    200 請求成功
    302 Redirect,重定向。到其他地方獲取資源
    404 Not Found,沒找到。無法找到資源

    通常,和狀態碼一起的還有一條解釋性的短語,對該狀態進行描述。更詳細的介紹在後續文章中。

  • 複合頁面 看下面一個例子:

    包含多資源的複合頁面
    該頁面中的每一個資源都要使用一個單獨的HTTP事務。

HTTP通訊所使用的報文格式

HTTP報文是由一行一行的簡單字串組成。都是純文字,不是二進位制。客戶端傳送給伺服器的稱為請求報文(request message),伺服器發往客戶端的稱為響應報文(response message)。HTTP報文組成:

  • 起始行
    報文的第一行,請求報文中用來說明要做什麼,在響應報文中說明出現的情況。

  • 首部欄位
    起始行之後可以有零個或多個首部欄位。每個首部欄位是一個鍵值對。首部以一個空行結束。

  • 主體
    首部的空行之後是主體。請求主體中包括要傳送給伺服器的資料,響應主體中包括返回給客戶端的資料。主體的資料不具有結構化,可以包含任意二進位制資料和文字。

    下面是一個請求和響應報文示例:

    請求報文和響應報文示例

底層TCP網路傳輸

HTTP是應用層協議,它無需關係網路通訊的具體細節,把聯網的細節都交給了通用可靠的TCP/IP。相關內容,請檢視該篇起始位置給出的連結.

下面是一個建立連結請求資料的過程:

基本的連結處理

總結步驟如下:

  • URL解析主機名(或稱為域名)
  • 通過主機名獲取IP地址
  • 解析埠號(如果有的話),沒有使用預設的80
  • 建立於伺服器的TCP連結
  • 向伺服器傳送HTTP請求報文
  • 伺服器返回HTTP響應報文
  • 關閉連結

HTTP協議演變(瞭解)

  • HTTP/0.9 HTTP的1991原型版。有很多嚴重的設計缺陷,只支援GET方法,不支援多媒內容的MIME型別,各種HTTP首部或版本號。其初衷是為了獲取HTML物件,很快就被1.0版本取代。
  • HTTP/1.0 1.0是一個廣泛使用的版本。新增了版本號,各種首部,一些額外方法,已經對多媒體物件的處理。它使得包含生動圖片的Web頁面和互動式表格成為可能。
  • HTTP/1.0+ 在20實際90年代中葉,為了滿足快速擴張的網際網路需要,流行的客戶端和伺服器在HTTP中新增了各種特性,包含keep-alive,虛擬主機支援,以及代理連結支援。帶有這種非官方的HTTP版本通常稱為HTTP/1.0+
  • HTTP/1.1 HTTP/1.1重點是校正HTTP設計中的結構性缺陷,明確語義,引入重要的效能優化措施,刪除不好的特性。
  • HTTP/NG(HTTP/2.0) 2.0版注重效能的大幅優化,以及更強大的服務邏輯遠端執行框架。更具體的HTTP/2.0介紹看這裡

HTTP版本時間線

Web結構元件

主要了解概念,更細緻的討論在後續文章中。

  • 代理
    客戶端和伺服器之間的HTTP中間實體。接收所有客戶端的HTTP請求,並轉發給伺服器(可能對請求進行修改)。對於使用者來說,這些中介軟體就是代理,代表使用者訪問伺服器。

    代理示意圖

  • 快取
    Web快取代理快取是一種特殊的HTTP代理伺服器,可以將經過代理傳送的常用檔案複製儲存起來,下一個請求同一檔案的客戶端就可以使用該快取。

    快取示意圖

  • 閘道器
    閘道器也是一種特殊的伺服器,作為其他伺服器的中間實體使用,具有特定的功能。如下,HTTP/FTP閘道器,負責將HTTP客戶端的HTTP請求,在響應客戶端之前,閘道器會去FTP伺服器請求對應資料。實現了客戶端HTTP協議到FTP協議的轉換。

    HTTP/FTP閘道器

  • 隧道
    HTTP隧道通常用來在一條或多條HTTP連結上轉發非HTTP資料,轉發時不會窺探資料。比如通過HTTP連結承載加密的安全套接字層(SSL)流量,這樣SSL流量就可以穿過只允許Web流量通過的防火牆。

    HTTP/SSL 隧道

  • Agent代理
    使用者Agent代理簡稱為Agent代理,是代表使用者發起HTTP請求的客戶端應用程式(瀏覽器)。在HTTP請求報文的首部中存在User-agent欄位,表示了傳送當前請求的代理資訊。使用者代理不僅包含瀏覽器,還有一些其他的程式,指令碼等,如“網路蜘蛛”,“Web機器人”,它們專門在網際網路上收集資訊。

    代理程式示意圖

結語

通過該篇,我們瞭解了HTTP的通訊模型(請求應答模式),事務的定義,還簡單的瞭解了HTTP的報文結構以及Web結構元件等.後序文章將會分塊介紹HTTP的相關知識,關注我你就能及時看到哈.

  • 部分圖片來源於網路,如有侵權,請告知。
  • 如有錯誤,還請指出。共勉!
  • 您的喜歡是最大的讚賞。

相關文章