HTTP 學習瞭解(二)

echo_dump發表於2019-12-18
  • HTTP報文

HTTP報文大致可分為報文首部和報文主體,兩者之間以空行[回車符和換行符]分開。通常,不應會有報文主體

  • HTTP 首部

  • HTTP報文首部

  1. 請求行

  2. 請求首部欄位

  3. 通用首部欄位

  4. 實體首部欄位

  5. 其它

注意:請求行包括(方法,URI,HTTP版本),HTTP首部欄位(請求首部欄位,通用首部欄位,實體首部欄位)

在這裡插入圖片描述

  • HTTP請求報文:
  1. METHOD

  2. URI

  3. HTTP版本

  4. HTTP首部欄位

  • HTTP響應報文
  1. HTTP版本

  2. 狀態碼(數字原因短語)

  3. HTTP首部欄位

在這裡插入圖片描述

  • 報文

是HTTP通訊中的基本單位,由8位組位元組流組成,透過HTTP通訊傳輸

  • 實體

作為請求或響應的有效荷載資料被傳輸,其內容由實體首部和實體主體組成,HTTP報文的主體用於傳輸請求或響應的實體主體。
通常,報文主體同於實體主體,只有在進行編碼操作的時候,實體主體和報文主體才會產生差異

  • 壓縮傳輸的內容編碼

內容編碼指明應以在實體內容上的編碼格式,並保持實體資訊的原樣壓縮,內容編碼後的實體由客戶端接收並負責解碼

常用的內容編碼:

  1. gzip [GNU zip]

  2. compress [unix 系統的標準壓縮]

  3. deflate [zlib]

  4. identity [不進行編碼]

  • 分割傳送分塊傳輸

在HTTP通行過程中,請求的編碼實體資源尚未全部傳輸完成之前,瀏覽器無法顯示請求頁面,在傳輸大容量資料的時候,透過把資料分割成多塊,這樣讓瀏覽器
逐步顯示頁面。這種把實體主體分塊的功能稱為分塊傳輸編碼。分塊傳輸編碼會將實體主體分成多個部分[塊]。每一塊都會用十六進位制來標記塊的大小,而實體
主體的最後一塊會使用0(CR+LF)來標記。

  • 獲取部分內容的範圍請求 指定範圍傳送的請求叫做範圍請求[Range Request]

使用範圍請求的時候會使用到首部欄位 [Range]

Range: bytes=5001-10000 //5001 - 10000

Range: bytes=5001 //5001以後的所有

Range: bytes=-3000, 5000-7000 //從開始到3000,5000-7000的多重範圍請求

針對範圍請求,響應狀態碼會返回 206 Partial Content的響應報文,對於多重範圍請求,響應首部欄位 Content-Type會標明 multipart/byteranges

  • 內容協商返回最合適的內容

內容協商機制是客戶端和服務端就響應的資源內容進行交涉,返回給客戶端最合適的內容。主要是就響應資源的語言,字符集,編碼方式。。。
內容協商主要有三種型別:

  1. 伺服器驅動協商 以服務端為主

  2. 客戶端驅動協商 以客戶端為主

  3. 透明協商 是伺服器驅動和客戶端驅動結合體,

  • HTTP的返回狀態碼

HTTP狀態碼返回

  • 2XX

    1. 200 OK

    2. 204 not content
      伺服器接收的請求已成功處理,但在返回的響應報文中不含實體的主體部分。

    3. 206 partial content
      客戶端進行了範圍請求,伺服器成功執行了這部分請求,響應報文中含有content-range指定範圍的實體內容

  • 3XX

    1. 301 moved permanently
      永久性重定向,表示請求的資源已被分配了新的URI。

    2. 302 found
      臨時移動資源

    3. 303 see other
      該狀態碼錶示由於請求對應的資源存在著另一個URI,應使用get方式定向獲取請求的資源

    4. 304 not modified
      表示客戶端傳送附帶的請求時,伺服器端允許訪問資源,但未滿足條件的情況,304狀態碼返回

    5. 307 temporary redirect
      臨時重定向。

  • 4XX

    1. 400 bad request
      請求報文中存在語法錯誤,當錯誤發生的時候,需要修改請求內容再次傳送請求

    2. 401 unauthorized
      表示傳送的請求需要有透過HTTP認證的認證資訊,(如果之前請求過一次,則表示使用者認證失敗)

    3. 403 forbidden
      請求資源的訪問被伺服器拒絕了 (未獲得檔案系統的訪問許可權,訪問許可權出現問題)

    4. 404 not found
      表明伺服器上無法找到請求的資源 (服務端拒絕請求不想說明理由的時候使用)

  • 5XX

    1. 500 internal server error
      服務端在執行請求時發生了錯誤,(程式發生致命錯誤或存在bug或者是臨時性故障)

    2. 503 service unavailable
      表明伺服器暫時處於超負載或正在進行停機維護,現在無法處理請求。

  • 通訊資料轉發程式 [代理,閘道器,隧道]

  • 代理 代理就是一種有轉發功能的應用程式,是屬於客戶端和服務端的中間人,它接受客戶端傳送的訊息然後再轉發給服務端,同時也把服務端的訊息轉發給
    客戶端

  • 閘道器 轉發其它伺服器通訊資料的伺服器,接受客戶端傳送過來的的請求時,它就像自己擁有資源的源伺服器一樣對請求進行處理

  • 隧道 在相隔甚遠的客戶端和服務端兩者之間進行中轉,並保持雙方通訊連線的應用程式

本作品採用《CC 協議》,轉載必須註明作者和本文連結
LIYi ---- github地址

相關文章