第3章 HTTP報文內的HTTP信息(1)報文頭部、壓縮傳輸的內容編碼、Multipart

click –> 帶着問題學習~

前面介紹了報文的整體結構,這篇重心放在報文的頭部。

1. 報文

用於HTTP協議交互的信息叫做報文

  • 請求報文:由客戶端發出的HTTP報文。
  • 響應報文:由服務端返回的HTTP報文。

請求報文:
請求報文

響應報文:
響應報文

2. 請求報文和響應報文的頭部內容組成

  • 請求行:方法名、協議、協議版本、狀態碼、簡短的解釋語。
  • 響應行:協議、協議版本、狀態碼、簡短的解釋語。
  • 頭部字段
  • 其他:可能包含HTTP RFC 裏維定義的頭部。(cookie

3.編碼提升傳輸速率

  • 報文主體和實體主體的差異

    HTTP報文的主體用於請求傳輸和響應的實體主體。
    通常報文主體等於實體主體。只有當傳輸中進行編碼操作時,實體主體纔會發生響應的變化,導致兩者產生差異。

    (1)什麼是報文主體(message)?
    報文主體就是HTTP傳輸信息中的主體部分,是HTTP通信的基本單位,由8位組字節流組成。通過HTTP通信傳輸。

    (2)什麼是實體主體(entity)?
    實體主體作爲請求和響應的有效載荷數據被傳輸。

4.壓縮傳輸的內容編碼

(1)什麼是內容編碼?

內容編碼指明應用在實體內容上的編碼格式,並把實體內容原樣壓縮。內容編碼後的實體由客戶端接收負責解碼。

(2)常用的編碼格式

- gzip (GUN zip)
- compress (UNIX 系統的標準壓縮)
- deflate (zlib)
- identity (不進行編碼)

(3)分塊傳輸編碼

  • 由於請求的編碼實體資源未全部接收完成之前,瀏覽器不會顯示請求的頁面。在請求大量數據時,將數據分塊傳輸,能夠讓瀏覽器逐步的顯示頁面。這種把實體分塊的編碼叫做分塊傳輸編碼。

  • 分塊傳輸編碼會將實體主體分爲多塊,每塊用16進制來標記塊的大小,結尾用 0+ 換行 標記。

  • 使用分塊傳輸編碼會在客戶端對實體主體進行解碼。

5.發送多種數據的多部分對象集合

發送一份報文可以包含多類型實體。多用於文件的上傳。

多部分集合包含的對象如下;

  • multipart/form-data

    web表單上傳時使用
    
  • multipart/byteranges

    響應報文包含了多個範圍時使用
    

6.獲取部分內容的範圍請求 斷點續傳

要實現該功能需要制定下載的實體範圍,這種制定範圍發送請求叫做範圍請求。
針對範圍請求,服務器會返回狀態碼爲206的報文,多重範圍請求 響應會在頭部 Content-Type 表明 multipart-byteranges 返回報文主體。如果服務端不支持範圍請求則返回狀態碼200 OK並將所有報文一併返回。
執行範圍時會使用頭部字段 Range 來指定資源 byte 的範圍。
Range格式:
5001-10000字節
Range : byte = 5001-10000
5000之後的
Range : byte = 5001-
0-3000字節,5001-10000字節
Range : byte=-3000,5001-10000

7.內容協商返回最合適的內容(類似於 Android 的國際化)

實現內容協商有三種方式:

  • 服務器啓動協商
    以請求的頭部字段作爲參考在服務端自動處理

    頭部字段
    Accpet
    Accpet-Charset
    Accpet-Encoding
    Accpet-Language
    Conent-Language
    
  • 客戶端驅動協商
    用戶從瀏覽器的可選列表中手動選擇,還可以用JavaScript腳本在頁面自動選擇。
  • 透明協商
    服務端和客戶端驅動的結合體。由服務端和客戶端各自進行協商的一種方法。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章