HTTP數據傳輸的幾個關鍵字Header

? ? ? ? 本文著重針對http在傳輸數據時的幾種封裝方式進行描述。

? ? ? ? 1.?Content-Type(描述body內容類型以及字符編碼)

????????HTTP的Content-Type用于定義數據傳輸的媒體類型(MIME類型),主要分為以下幾類:

????????(一)、?基礎文本類型?

????????????????text/plain?
????????????????純文本格式,無任何格式標記,常用于日志或簡單文本傳輸。示例:
????????????????Content-Type: text/plain; charset=utf-8

? ? ? ? ? ? ? ? text/html?
????????????????HTML文檔格式,用于網頁渲染。示例:
????????????????Content-Type: text/html; charset=utf-8

? ? ? ? ? ? ? ??text/xml?
????????????????XML數據格式,適用于結構化文本傳輸。示例:

????????????????Content-Type: text/xml; charset=utf-8


? ? ? ? (二)、?表單數據類型?

????????????????application/x-www-form-urlencoded?
????????????????表單默認編碼格式,數據以key=value形式拼接(如name=John&age=30)。適用于普通表單提交。示例:
????????????????Content-Type: application/x-www-form-urlencoded

? ? ? ? ? ? ? ??multipart/form-data?
????????????????支持文件上傳的編碼格式,數據按字段分割并通過boundary標識。示例:
????????????????Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123


? ? ? ? (三)、?結構化數據格式?

????????????????application/json?
????????????????JSON數據格式,廣泛用于API交互。示例:

? ??????????????Content-Type: application/json; charset=utf-8

? ? ? ? ? ? ? ??application/xml?
????????????????XML數據格式,適用于復雜結構化數據傳輸。示例:

????????????????Content-Type: application/xml

? ? ? ? ? ? ? ??application/javascript?
????????????????JavaScript代碼傳輸,常用于動態腳本加載。示例:

????????????????Content-Type: application/javascript


????????(四)、?二進制文件類型?

????????????????application/octet-stream?
????????????????通用二進制流格式,適用于未知類型的文件下載。示例:

????????????????Content-Type: application/octet-stream

? ? ? ? ? ? ? ??image/*(如image/jpeg、image/png)?
????????????????圖片文件格式,*表示具體圖片類型(如JPEG、PNG)。示例:

????????????????Content-Type: image/jpeg

? ? ? ? ? ? ? ??application/pdf?
????????????????PDF文檔格式,用于文檔傳輸。示例:

????????????????Content-Type: application/pdf


????????(五)、?其他常見類型?

????????????????application/zip?
????????????????壓縮文件格式,適用于打包文件傳輸。示例:

????????????????Content-Type: application/zip

? ? ? ? ? ? ? ??audio/*(如audio/mpeg)?
????????????????音頻文件格式,如MP3、WAV等。示例:

????????????????Content-Type: audio/mpeg

? ? ? ? ? ? ? ??video/*(如video/mp4)?
????????????????視頻文件格式,如MP4、AVI等。示例:

????????????????Content-Type: video/mp4


????????(六)、?MIME類型結構?

????????????????MIME類型由主類型(media type)和子類型(subtype)組成,格式為:

????????????????Content-Type: <主類型>/<子類型>; 參數(如charset、boundary等)
????????????????例如:text/html; charset=utf-8?。

????????關鍵使用場景
????????????????API交互?:優先使用application/json?。
????????????????文件上傳?:必須使用multipart/form-data?。
????????????????網頁渲染?:需指定text/html?。
????????????????純文本傳輸?:采用text/plain?。

? ?2.Content-Encoding(描述整個body內容的編碼)

? ? ? ? ? ? ? ? 請求方向服務端描述能夠接收的編碼算法

????????????????Accept-Encoding: gzip, deflate, br

? ? ? ? ????????服務端向請求端描述實際使用的編碼算法? ? ? ??

????????????????Content-Encoding: gzip

????????當采用具體的壓縮算法后,服務器端會對整體需要返回的數據進行對應算法的壓縮,在Content-Length中描述的長度,將是壓縮后數據的長度。

? ? ? ? 客戶端收取到數據后,需要使用對應算法進行解壓縮,得到真實的數據。

? ?3.Transfer-Encoding(數據傳輸發送和壓縮算法)

????????Transfer-Encoding 是 HTTP 協議中用于指定傳輸編碼方式的響應頭字段,其枚舉值包括以下幾種:

????????chunked?
????????表示數據以分塊形式傳輸,適用于無法預先確定響應體長度的場景(如動態生成內容或大文件傳輸)?。

????????ompress?
????????使用 Lempel-Ziv-Welch (LZW) 算法進行壓縮傳輸,但目前主流瀏覽器已不再支持該格式?。

????????deflate?
????????使用 zlib 結構和 deflate 壓縮算法進行傳輸,適用于需要壓縮的場景?。

????????gzip?
????????使用 Lempel-Ziv coding (LZ77) 算法進行壓縮傳輸,廣泛用于文本內容的壓縮(如 HTML、CSS、JS 等)?。

????????identity?
????????表示不進行任何編碼或壓縮,直接傳輸原始數據?。

????????多值組合?
????????可以同時指定多個值,用逗號分隔。例如:Transfer-Encoding: gzip, chunked,表示先進行 gzip 壓縮,再以分塊形式傳輸?。

? ? ? ? 備注:在chunked和壓縮算法多值組合時,這里的壓縮算法是單個chunked內的壓縮,不是對整體body的壓縮。

? ? ? ? 如果一個http響應頭如下:Content-Encoding:deflate Transfer-Encoding:gzip,chunked,那么客戶端在收取到每個chunked數據時,先用gzip進行解壓縮,收取完所有的chunked后,把解壓縮的數據拼到一起,再使用deflate進行解壓縮,才能得到服務器最終要發送的數據。

? ? ? ? 對chunked的描述

????????chunked 是 HTTP/1.1 中用于分塊傳輸數據的編碼方式,適用于動態生成內容或大文件傳輸的場景。以下是 chunked 格式的詳細描述:

????????(一)、基本格式?

????????????????每個 chunk 的結構?

????????????????????????每個 chunk 由以下部分組成:
????????????????????????塊大小?:以十六進制表示,后跟 \r\n。
????????????????????????數據內容?:實際數據,后跟 \r\n。
????????????????示例:
????????????????????????5\r\n ? ? ? ?// 塊大小為5字節
????????????????????????Hello\r\n ? ?// 數據內容


????????????????結束標記?

????????????????????????最后一個 chunk 的塊大小為 0,表示傳輸結束。
????????????????示例:
????????????????????????0\r\n\r\n ? ?// 結束標記

? ? ? ? (二)、完整示例?

????????以下是一個完整的 chunked 傳輸示例:

????????????????HTTP/1.1 200 OK ?
????????????????Content-Type: text/plain ?
????????????????Transfer-Encoding: chunked ?

????????????????5\r\n ?
????????????????Hello\r\n ?
????????????????6\r\n ?
?????????????????World\r\n ?
????????????????0\r\n\r\n ?

????????解析:
????????????????第一個 chunk:5\r\nHello\r\n,表示傳輸了 5 字節的數據 Hello。
????????????????第二個 chunk:6\r\n World\r\n,表示傳輸了 6 字節的數據 World。
????????????????結束標記:0\r\n\r\n,表示傳輸結束。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76536.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76536.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76536.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

面向教育領域的實時更新RAG系統:核心模塊設計與技術選型實踐指南

目錄 面向教育領域的實時更新RAG系統&#xff1a;核心模塊設計與技術選型實踐指南 一、業務需求分析 二、系統架構設計&#xff08;核心模塊&#xff09; 三、核心模塊詳解與技術選型建議 &#xff08;一&#xff09;實時更新向量知識庫 &#xff08;二&#xff09;教材與…

k8s patch方法更新deployment和replace方法更新deployment的區別是什么

在Kubernetes中&#xff0c;patch 和 replace 方法用于更新資源&#xff08;如 Deployment&#xff09;&#xff0c;但它們的實現方式和適用場景有顯著差異。以下是兩者的核心區別&#xff1a; 1. 更新范圍 replace 方法 完全替換整個資源配置。需要用戶提供完整的資源定義&…

解決安卓手機WebView無法直接預覽PDF的問題(使用PDF.js方案)

在移動端開發中&#xff0c;通過 webview 組件直接加載PDF文件時&#xff0c;不同平臺的表現差異較大&#xff1a; iOS & 部分安卓瀏覽器&#xff1a;可正常內嵌預覽&#xff08;依賴系統內置PDF渲染能力&#xff09; 大多數安卓設備&#xff1a;由于缺乏原生PDF插件&…

基于javaweb的SSM+Maven機房管理系統設計與實現(源碼+文檔+部署講解)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文…

7-6 混合類型數據格式化輸入

本題要求編寫程序&#xff0c;順序讀入浮點數1、整數、字符、浮點數2&#xff0c;再按照字符、整數、浮點數1、浮點數2的順序輸出。 輸入格式&#xff1a; 輸入在一行中順序給出浮點數1、整數、字符、浮點數2&#xff0c;其間以1個空格分隔。 輸出格式&#xff1a; 在一行中…

【GPIO8個函數解釋】

函數解釋 void GPIO_DeInit(GPIO_TypeDef* GPIOx); 作用&#xff1a;將指定GPIO端口的所有寄存器恢復為默認值。這會清除之前對該端口的所有配置&#xff0c;使其回到初始狀態。使用方法&#xff1a;傳入要復位的GPIO端口指針&#xff0c;例如GPIOA、GPIOB等。 void GPIO_AF…

將圖表和表格導出為PDF的功能

<template><div><divref"pdfContent"style"position: relative; width: 800px; margin: 0 auto"><!-- ECharts 圖表 --><div id"chart" style"width: 100%; height: 400px" /><!-- Element UI 表格 …

C++中的鏈表操作

在C中&#xff0c;鏈表是一種常見的數據結構&#xff0c;它由一系列節點組成&#xff0c;每個節點包含數據部分和指向下一個節點的指針。C標準庫&#xff08;STL&#xff09;中提供了std::list和std::forward_list兩種鏈表實現&#xff0c;分別對應雙向鏈表和單向鏈表。此外&am…

蛋白設計 ProteinMPNN

傳統方法的局限性是什么&#xff1f; 傳統蛋白質設計方法的局限性&#xff1a; 基于物理的傳統方法&#xff0c;例如羅塞塔&#xff0c;面臨計算難度&#xff0c;因為需要計算所有可能結構的能量&#xff0c;包括不需要的寡聚態和聚合態。 設計目標與顯式優化之間缺乏一致性通…

有哪些開源的視頻生成模型

1. 阿里巴巴通義萬相2.1&#xff08;WanX 2.1&#xff09; 技術架構&#xff1a;基于Diffusion Transformer&#xff08;DiT&#xff09;架構&#xff0c;結合自研的高效變分自編碼器&#xff08;VAE&#xff09;和Flow Matching訓練方案&#xff0c;支持時空上下文建模。參數…

【動態規劃】最長上升子序列模板

最長上升子序列 題目傳送門 一、題目描述 給定一個長度為 N 的數列&#xff0c;求數值嚴格單調遞增的子序列的長度最長是多少。 輸入格式 第一行包含整數 N。 第二行包含 N 個整數&#xff0c;表示完整序列。 輸出格式 輸出一個整數&#xff0c;表示最大長度。 數據范圍 …

LeetCode 891 -- 貢獻度思想

題目描述 子序列寬度之和 思路 ref 代碼 相似題 子數組范圍和 acwing

化工行業如何通過定制化工作流自動化實現25-30%成本優化?

作者&#xff1a;Mihir Jhaveri 編譯&#xff1a;李升偉 發布日期&#xff1a;2024年10月30日 在化工生產領域&#xff0c;數字化轉型正以顛覆性態勢重塑產業格局。通過集成定制化軟件、ERP系統、工業物聯網&#xff08;IIoT&#xff09;傳感網絡、機器人流程自動化&#xff0…

Compose組件轉換XML布局

文章目錄 學習JetPack Compose資源前言&#xff1a;預覽界面的實現Compose組件的布局管理一、Row和Colum組件&#xff08;LinearLayout&#xff09;LinearLayout&#xff08;垂直方向 → Column&#xff09;LinearLayout&#xff08;水平方向 → Row&#xff09; 二、相對布局 …

RAG測試數據集資源

一、通用問答基準數據集 HotpotQA 特點:包含11萬+多跳問答對最佳用途:測試復雜推理能力數據示例:{"question": "Were Scott Derrickson and Ed Wood of the same nationality?","answer": "Yes, both are American" }MS MARCO 特點…

快速掌握MCP——Spring AI MCP包教包會

最近幾個月AI的發展非常快&#xff0c;各種大模型、智能體、AI名詞和技術和框架層出不窮&#xff0c;作為一個業余小紅書博主的我最近總刷到MCP這個關鍵字&#xff0c;看著有點高級我也來學習一下。 1.SpringAI與functionCall簡單回顧 前幾個月我曾寫過兩篇關于SpringAI的基礎…

學習筆記--(6)

import numpy as np import matplotlib.pyplot as plt from scipy.special import erfc# 設置參數 rho 0.7798 z0 4.25 # 確保使用大寫 Z0&#xff0c;與定義一致def calculate_tau(z, z_prime, rho, s_values):return np.log(rho * z * z_prime * s_values / 2)# 定義 chi_…

【AI4CODE】5 Trae 錘一個基于百度Amis的Crud應用

【AI4CODE】目錄 【AI4CODE】1 Trae CN 錐安裝配置與遷移 【AI4CODE】2 Trae 錘一個 To-Do-List 【AI4CODE】3 Trae 錘一個貪吃蛇的小游戲 【AI4CODE】4 Trae 錘一個數據搬運工的小應用 1 百度 Amis 簡介 百度 Amis 是一個低代碼前端框架&#xff0c;由百度開源。它通過 J…

認識 Promise

認識 Promise 前言&#xff1a;為什么會出現 Promise&#xff1f; 最常見的一個場景就是 ajax 請求&#xff0c;通俗來說&#xff0c;由于網速的不同&#xff0c;可能你得到返回值的時間也是不同的&#xff0c;這個時候我們就需要等待&#xff0c;結果出來了之后才知道怎么樣…

純c++實現transformer 訓練+推理

項目地址 https://github.com/freelw/cpp-transformer C 實現的 Transformer 這是一個無需依賴特殊庫的 Transformer 的 C 實現&#xff0c;涵蓋了訓練與推理功能。 本項目使用C復刻了《Dive into Deep Learning》中關于 Transformer 的第 11 章11.7小節點內容。構建了一個英…