走進HTTP協議之二 基本HTTP機制

本系列第一節,咱們回顧了與HTTP協議有關的基本術語和概念,本文將分析HTTP協議的基本原理與機制html

  1. HTTP協議的用途
    image
    HTTP協議用於客戶端與服務器之間的通訊,在通訊線路兩端,一定一端是客戶端,另外一端是服務器。
    注意:客戶端與服務器的角色不是固定的,一端充當客戶端,也可能在某次請求中充當服務器。這取決與請求的發起端。HTTP協議屬於應用層,創建在傳輸層協議TCP之上。客戶端經過與服務器創建TCP鏈接,以後發送HTTP請求接收HTTP響應都是經過訪問Socket接口來調用TCP協議實現。安全

  2. 請求與響應
    HTTP協議規定,由客戶端發起請求,服務器響應請求並返回信息。image
    如圖,反映了一次HTTP請求並接收一個HTML文件的過程與時間消耗(RTT)。客戶端經過TCP鏈接發送請求報文,服務器收到請求後向其傳輸文件並返回響應報文
    • 請求報文服務器

      GET /index.html HTTP/1.1
      
        Host: www.cnblogs.com/ACFLOOD 
      
        Content-Length: 16

      請求報文是由請求方法請求URI協議版本可選的首部字段以及內容實體構成。session

      本例中,GET表示請求方法,/index.jsp是請求URI,HTTP/1.1是協議版本,其他的是首部字段
    • 響應報文less

      HTTP/1.1 200 OK 
      
        Date: Mon, 10 May 2016 07:50:15 GMT
      
        Content-Length: 300
      
        Content-Type: text/html

      響應報文基本上由協議版本狀態碼(返回請求成功或失敗狀況),對狀態碼的解釋短語可選的首部字段以及內容實體構成。jsp

      本例中,HTTP/1.1表示協議版本,200表示狀態碼,OK是對狀態碼的描述,Date是響應日期,與Content-Length和Content-Type同樣,都屬於首部字段加密

  3. HTTP是無狀態協議3d

    HTTP是一種無狀態(stateless) 協議,HTTP協議自己不會對發送過的請求和相應的通訊狀態進行持久化處理。這樣作的目的是爲了保持HTTP協議的簡單性,從而可以快速處理大量的事務,提升效率。代理

    然而,在許多應用場景中,咱們須要保持用戶登陸的狀態或記錄用戶購物車中的商品。因爲HTTP是無狀態協議,因此必須引入一些技術來記錄管理狀態,例如Cookiecode

  4. HTTP方法

    在第一節,咱們曾辨析過GET與POST方法。實際上經常使用的HTTP方法遠不止這些,下圖展現了基本的HTTP方法。
    image
    • GET:獲取資源。經過URI請求訪問已被識別的資源,通過服務器解析後返回相應內容。
    • POST:傳輸實體。例如登陸註冊時表單的提交。
    • PUT:傳輸文件。相似於FTP協議中的文件上傳,PUT方法要求在請求報文的主體包含文件,保存到指定URI的位置。因爲PUT方法沒有驗證機制,存在安全性問題,因此必須配合採用安全標準(如REST)。
    • HEAD:得到報文首部。不返回報文主體,僅返回首部。
    • DELETE:刪除文件。DELELTE方法請求刪除服務器上的資源,一樣存在安全性問題。因此必須有驗證機制與之配合。
    • OPTIONS:詢問服務器支持哪些方法。示例

      請求報文

      OPTIONS * HTTP/1.1
      
        Host: www.cnblogs.com

      響應報文

      HTTP/1.1 200 OK
      
        Allow: GET, POST, HEAD, OPTIONS
      本例中,客戶端經過OPTIONS *詢問服務器支持的方法。響應報文最後返回了支持的 方法類型。
    • TRACE:追蹤路徑。發送請求時,經過在Max-Forwards首部字段中填入數值,每通過一個服務器數值減一,當減爲零以後中止傳輸,最後收到請求的服務器發出響應。
    • CONNECT:經過與代理服務器創建隧道,使用隧道協議加密以後,與服務器進行TCP通訊。經常使用的隧道協議有SSL(Secure Socket Layer)以及TLS(Transport Layer Security)

  5. 非持久鏈接 和 持久鏈接

    在實際的應用中,客戶端每每會發出一系列請求,接着服務器端對每一個請求進行響應。對於這些請求|響應,若是每次都通過一個單獨的TCP鏈接發送,稱爲非持久鏈接。反之,若是每次都通過相同的TCP鏈接進行發送,稱爲持久鏈接

    非持久鏈接在每次請求|響應以後都要斷開鏈接,下次再創建新的TCP鏈接,這樣就形成了大量的通訊開銷。例如前面提到的往返時間(RTT) 就是在創建TCP鏈接的過程當中的代價。

    非持久鏈接給服務器帶來了沉重的負擔,每臺服務器可能同時面對數以百計甚至更多的請求。持久鏈接就是爲了解決這些問題,其特色是一直保持TCP鏈接狀態,直到遇到明確的中斷要求以後再中斷鏈接。持久鏈接減小了通訊開銷,節省了通訊量。
    image圖 持久化鏈接節省通訊開銷

  6. 總結

    本文分析了基本的HTTP運行機制與原理,經過一些實例分析了HTTP請求與響應的過程,以及常見的HTTP方法。對於HTTP鏈接的特性與機制也進行了探討。固然這些只是簡單的創建起基礎的概念。後續的系列我還會對Cookie與session的原理,請求發起的過程以及Socket(套接字)的理,HTTP解析的過程進行深刻思考和剖析。


做者: I'm coding

連接ACFLOOD

著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

若是您以爲本文對您有所幫助,就給俺點個贊吧!

相關文章
相關標籤/搜索