HTTP協議原理詳解及應用

HTTP協議是什麼

  1. HTTP協議(HyperText Transfer Protocol,超文本傳輸協議),是用於從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。它是因特網上應用最爲普遍的一種網絡傳輸協議,全部的WWW文件都必須遵照這個標準。html

  2. HTTP是一個基於TCP/IP通訊協議來傳遞數據(HTML 文件, 圖片文件, 查詢結果等)。瀏覽器

HTTP協議工做原理

  1. HTTP協議工做於客戶端-服務端架構上。瀏覽器做爲HTTP客戶端經過URL向HTTP服務端即WEB服務器發送全部請求。bash

  2. Web服務器有:Apache服務器,IIS服務器(Internet Information Services)等。服務器

  3. Web服務器根據接收到的請求後,向客戶端發送響應信息。網絡

  4. HTTP默認端口號爲80,可是你也能夠改成8080或者其餘端口。架構

下圖表展現了HTTP協議通訊流程:ide

HTTP協議三點注意事項:

  • HTTP是無鏈接:無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。
  • HTTP是媒體獨立的:這意味着,只要客戶端和服務器知道如何處理的數據內容,任何類型的數據均可以經過HTTP發送。客戶端以及服務器指定使用適合的MIME-type內容類型。
  • HTTP是無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。另外一方面,在服務器不須要先前信息時它的應答就較快

HTTP協議工做流程

一.請求流程

一次HTTP請求,其工做過程大概以下:網絡傳輸協議

  1. 用戶在瀏覽器中鍵入須要訪問網頁的URL或者點擊某個網頁中連接;spa

  2. 瀏覽器根據URL中的域名,經過DNS解析出目標網頁的IP地址;3d

    瀏覽器請求這個頁面:http://hackr.ip/index.html
    在這一步,須要域名系統DNS解析域名hackr.ip,得主機的IP地址 20X.189.105.112。
    而後將上面結合本機本身的信息,封裝成一個http請求數據包
    複製代碼
  3. 在HTTP開始工做前,客戶端首先會經過TCP/IP協議來和服務端創建連接(TCP三次握手)

  4. 創建鏈接後,客戶機發送一個請求給服務器,請求方式的格式爲:統一資源標識符(URL)、協議版本號,後邊是MIME信息包括請求修飾符、客戶機信息和內容。

  5. 服務器接到請求後,給予相應的響應信息,其格式爲一個狀態行,包括信息的協議版本號、一個成功或錯誤的代碼,後邊是MIME信息包括服務器信息、實體信息和可能的內容。

  6. 通常狀況下,一旦Web服務器向瀏覽器發送了請求數據,它就要關閉TCP鏈接,而後若是瀏覽器或者服務器在其頭信息加入了這行代碼: Connection:keep-alive,TCP鏈接在發送後將仍然保持打開狀態,因而,瀏覽器能夠繼續經過相同的鏈接發送請求。保持鏈接節省了爲每一個請求創建新鏈接所需的時間,還節約了網絡帶寬。

    過程以下圖

二.消息結構

HTTP是基於客戶端/服務端(C/S)的架構模型,經過一個可靠的連接來交換信息,是一個無狀態的請求/響應協議。HTTP使用統一資源標識符(Uniform Resource Identifiers, URI)來傳輸數據和創建鏈接。 一旦創建鏈接後,數據消息就經過相似Internet郵件所使用的格式[RFC5322]和多用途Internet郵件擴展(MIME)[RFC2045]來傳送。

2.1 URI和URL

  • URI

URI(Uniform Resource Identifier)是統一資源標識符,在某個規則下能把這個資源獨一無二標示出來,好比人的身份證號

  1. Uniform 不用根據上下文來識別資源指定的訪問方式
  2. Resource 能夠標識的任何東西
  3. Identifier 表示可標識的對象
  • URL

統一資源定位符,表示資源的地點,URL時使用瀏覽器訪問WEB頁面時須要輸入的網頁地址

  1. Uniform 不用根據上下文來識別資源指定的訪問方式
  2. Resource 能夠標識的任何東西
  3. Location 定位
  • URL的格式

三.請求報文

客戶端發送一個HTTP請求到服務器的請求消息包括如下格式:請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成,下圖給出了請求報文的通常格式。

1.請求行(request line)

  • 請求方法
    GET 獲取資源
    POST 向服務器端發送數據,傳輸實體主體
    PUT 傳輸文件
    HEAD 獲取報文首部
    DELETE 刪除文件
    OPTIONS 詢問支持的方法
    TRACE 追蹤路徑
    協議/版本號
    URL
    複製代碼
  • 請求頭
    通用首部(General Header)
    請求首部(Request Header)
    響應首部(Response Header)
    實體首部(Entity Header Fields)
    複製代碼
  • 請求體

四.響應報文

HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文。

HTTP協議狀態碼

狀態碼負責表示客戶端請求的返回結果、標記服務器端是否正常、通知出現的錯誤

狀態碼類別

類別 緣由短語
1XX Informational(信息性狀態碼)
2XX Success(成功狀態碼)
3XX Redirection(重定向)
4XX Client Error(客戶端錯誤狀態碼)
5XX Server Error(服務器錯誤狀態嗎)

2XX 成功

  • 200(OK 客戶端發過來的數據被正常處理
  • 204(Not Content 正常響應,沒有實體
  • 206(Partial Content 範圍請求,返回部分數據,響應報文中由Content-Range指定實體內容

3XX 重定向

  • 301(Moved Permanently) 永久重定向
  • 302(Found) 臨時重定向,規範要求方法名不變,可是都會改變
  • 303(See Other) 和302相似,但必須用GET方法
  • 304(Not Modified) 狀態未改變 配合(If-Match、If-Modified-Since、If-None_Match、If-Range、If-Unmodified-Since)
  • 307(Temporary Redirect) 臨時重定向,不應改變請求方法

4XX 客戶端錯誤

  • 400(Bad Request) 請求報文語法錯誤
  • 401 (unauthorized) 須要認證
  • 403(Forbidden) 服務器拒絕訪問對應的資源
  • 404(Not Found) 服務器上沒法找到資源

5XX 服務器端錯誤

  • 500(Internal Server Error)服務器故障
  • 503(Service Unavailable) 服務器處於超負載或正在停機維護

HTTP請求方法

根據HTTP標準,HTTP請求可使用多種請求方法。

HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

首部

通用首部字段

請求首部字段

響應首部字段

實體首部字段

相關文章
相關標籤/搜索