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

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

前言

前面咱們經過如下文章瀏覽器

分別對網際層的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大全看這裏app

  • URI 服務器上的每個資源,都會有本身的標識,稱爲統一資源標識符(Uniform Resource Identifier, URI),它能夠在世界範圍內標識並定位信息資源。框架

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

    • 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的相關知識,關注我你就能及時看到哈.

  • 部分圖片來源於網絡,若有侵權,請告知。
  • 若有錯誤,還請指出。共勉!
  • 您的喜歡是最大的讚揚。
相關文章
相關標籤/搜索