Accept-Encoding和Content-Encoding
Accept-Encoding和Content-Encoding是HTTP中用來對采用何種壓縮格式傳輸正文進行協定的一對header,作業原理如下:
- 瀏覽器發送請求,通過Accept-Encoding帶上自己支持的內容編碼格式串列
- 服務端從中挑選一個用來對正文進行編碼,并通過Content-Encoding回應頭指明回應編碼格式,
- 瀏覽器拿到回應正文后,根據Content-Encoding進行解壓縮,服務端若回應未壓縮的正文,則不允許回傳Content-Encoding,
壓縮型別:
- gzip:表示采用 Lempel-Ziv coding (LZ77) 壓縮演算法,以及32位CRC校驗的編碼方式
- Compress:采用Lempel-Ziv-Welch (LZW) 壓縮演算法,
- deflate:表示采用 zlib 結構 (在 RFC 1950 中規定),和 deflate 壓縮演算法(在 RFC 1951 中規定),
- identity:用于指代自身(未經過壓縮和修改),除非特別指明,這個標記始終可以被接受,
- Br:表示采用Brotli 演算法的編碼方式,
內容編碼:
- 內容編碼針對的只是傳輸正文,HTTP/1中,header始終是以ASCII文本傳輸,沒有經過任何壓縮;HTTP/2中引入header壓縮技術,
傳輸編碼Transfer-Encoding
- 用于表示節點之間傳輸message的編碼方式,最典型是分塊傳輸(chunked)
- 是一個回應header
Transfer-Encoding支持型別:
- 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的區別:
- Transfer-Encoding只是在傳輸程序中才有的,并發請求URL對應物體的本身特性,
- Transfer-Encoding是一個"跳到跳"的header,而Content-Encoding是"端到端"的header,
Content-type
Content-type是HTTP的物體首部,用于說明請求或者回傳的訊息主體是用何種方式編碼(即資源的MIME型別),在請求、回應header中均存在,
示例如下:
Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something
引數一般包含:
- 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作為編碼方式的遠程呼叫規范,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/24905.html
標籤:HTML5
下一篇:手把手教學h5小游戲 - 貪吃蛇
