HTTP中的Accept-Encoding、Content-Encoding、Transfer-Encoding、Content-Type

Accept-Encoding和Content-Encoding

Accept-Encoding和Content-Encoding是HTTP中用來對採用何種壓縮格式傳輸正文進行協定的一對header。工做原理以下:html

  • 瀏覽器發送請求,經過Accept-Encoding帶上本身支持的內容編碼格式列表
  • 服務端從中挑選一個用來對正文進行編碼,並經過Content-Encoding響應頭指明響應編碼格式。
  • 瀏覽器拿到響應正文後,根據Content-Encoding進行解壓縮。服務端若響應未壓縮的正文,則不容許返回Content-Encoding。

壓縮類型:node

  • gzip:表示採用 Lempel-Ziv coding (LZ77) 壓縮算法,以及32位CRC校驗的編碼方式
  • Compress:採用Lempel-Ziv-Welch (LZW) 壓縮算法。
  • deflate:表示採用 zlib 結構 (在 RFC 1950 中規定),和 deflate 壓縮算法(在 RFC 1951 中規定)。
  • identity:用於指代自身(未通過壓縮和修改)。除非特別指明,這個標記始終能夠被接受。
  • Br:表示採用Brotli 算法的編碼方式。

內容編碼:算法

  1. 內容編碼針對的只是傳輸正文。HTTP/1中,header始終是以ASCII文本傳輸,沒有通過任何壓縮;HTTP/2中引入header壓縮技術。

傳輸編碼Transfer-Encoding

  • 用於表示節點之間傳輸message的編碼方式。最典型是分塊傳輸(chunked)
  • 是一個響應header

Transfer-Encoding支持類型:json

  • chunked
  • compress
  • deflate
  • gzip
  • identit
  • 多個類型能夠共存

Gzip+Curl例子:瀏覽器

echo "content=Web%20%E5%AE%89%E5%85%A8%E6%98%AF%E4%B8%80%E9%A1%B9%E7%B3%BB%E7%BB%9F%E5%B7%A5%E7%A8%8B%EF%BC%8C%E4%BB%BB%E4%BD%95%E7%BB%86%E5%BE%AE%E7%96%8F%E5%BF%BD%E9%83%BD%E5%8F%AF%E8%83%BD%E5%AF%BC%E8%87%B4%E6%95%B4%E4%B8%AA%E5%AE%89%E5%85%A8%E5%A0%A1%E5%9E%92%E5%9C%9F%E5%B4%A9%E7%93%A6%E8%A7%A3%E3%80%82" | gzip -c > data.txt.gz

curl -v --data-binary @data.txt.gz -H'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' -H'Content-Encoding: gzip' -X POST https://qgy18.com/node/

Transfer-Encoding與Content-Encoding的區別:併發

  1. Transfer-Encoding只是在傳輸過程當中纔有的,併發請求URL對應實體的自己特性。
  2. Transfer-Encoding是一個"跳到跳"的header,而Content-Encoding是"端到端"的header。

Content-type

Content-type是HTTP的實體首部,用於說明請求或者返回的消息主體是用何種方式編碼(即資源的MIME類型)。在請求、響應header中均存在。app

示例以下:curl

Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something

參數通常包含:ide

  • media-type:資源或者數據的MIME type
  • charset:字符編碼標準
  • boundary:多於多部實體,boundary是必需的。其包括一組1到70個字符,用於封裝消息的多個部分的邊界。

Media-type經常使用類型:編碼

  • application/x-www-form-urlencoded
    • form表單或者提交的數據按照key1=value1&key2=value2方式進行編碼,key、value均進行了urlencode
  • multipart/form-data
    • 常見的POST數據提交的方式,使用form進行文件上傳的時候,必須讓form的enctype爲這個。
  • application/json
    • 消息主體是序列化後的json字符串。
  • text/html

    • 是一種用HTTP做爲傳輸協議,XML做爲編碼方式的遠程調用規範。
相關文章
相關標籤/搜索