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

来源:https://www.cnblogs.com/amyzhu/archive/2019/11/29/11960100.html
-Advertisement-
Play Games

Accept Encoding和Content Encoding Accept Encoding和Content Encoding是HTTP中用來對採用何種壓縮格式傳輸正文進行協定的一對header。工作原理如下: 瀏覽器發送請求,通過Accept Encoding帶上自己支持的內容編碼格式列表 服 ...


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 演算法的編碼方式。

內容編碼:

  1. 內容編碼針對的只是傳輸正文。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的區別:

  1. Transfer-Encoding只是在傳輸過程中才有的,併發請求URL對應實體的本身特性。
  2. 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作為編碼方式的遠程調用規範。

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、redis文件夾下的可執行文件(文章尾部有示例代碼) 可執行文件 作用 redis-server 啟動redis redis-cli redis命令行工具 redis-benchmark 基準測試工具 redis-check-aof AOP持久化文件檢測工具和修複工具 redis-check-d ...
  • sqlserver日誌處理不當而造成的隱患 事故背景:一大早還在路上,群里陸續有人反饋系統一直報錯 “Unknown error 258”,後來查詢日誌發現錯誤日誌 第一反應是不是資料庫連接不夠用了?導致超時?但是通過sql查詢當時連接也只有40個左右,於是繼續排查問題,發現dbserver機器這段 ...
  • 重建全庫索引: exec sp_msforeachtable 'DBCC DBREINDEX(''?'')' 更新全庫統計信息: --更新全部統計信息 exec sp_updatestats 實例反饋: 在實際項目中,出現過導入數據的存儲過程執行需要大概46分鐘,而通過更新全庫統計信息之後,只需要6 ...
  • 德 App 進行 Bundle 化後,由於業務的複雜性,Bundle 的數量非常多。而這帶來了一個新的問題——Bundle 之間的依賴關係錯綜複雜,需要進行管控,使 Bundle 之間的依賴保持在架構設計之下。 ...
  • Node的全局對象和全局變數、非同步、無阻塞IO?Node的技術架構和函數調用原理是什麼? ...
  • 什麼是CommonJS規範?它與NodeJS是什麼關係呢?CommonJS 的底層實現原理是什麼? ...
  • 1、清空所有行和所有列 $('#dgJGQuery').datagrid({ columns: [], url: '', data: [] }); 2、採用 datagrid-groupview 分組展示後,取消分組展示。 datagrid使用分組展示 是基於view屬性,把view屬性設置為gro ...
  • 響應式開發 1. 響應式開發原理 使用媒體查詢針對不同寬度的設備進行佈局和樣式的設置,從而適配不同設備的目的 | 設備劃分 | 尺寸區間 | | | | | 超小屏幕(手機) | =768px~=992px~=1200px | 2. 響應式佈局容器 響應式需要一個父級作為佈局容器,來配合子級元素來實 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...