HTTP数据传输的几个关键字Header

news2025/4/10 9:18:13

        本文着重针对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.coloradmin.cn/o/2327984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二极管正负极区分

二极管正负极区分 二极管是一种具有单向导电性的半导体器件&#xff0c;正确区分正负极对于其使用非常重要。以下是几种常见的二极管正负极区分方法&#xff1a; 1. 外观标识 有标记的二极管 色环或色点&#xff1a;许多二极管在表面会有一个色环或色点&#xff0c;这个标记…

【c++深入系列】:类与对象详解(中)

&#x1f525; 本文专栏&#xff1a;c &#x1f338;作者主页&#xff1a;努力努力再努力wz &#x1f4aa; 今日博客励志语录&#xff1a; 不是因为看到希望才坚持&#xff0c;而是坚持了才能看到希望 那么上一篇博客我讲解了什么是类和对象以及类和对象是怎么定义的&#xff0…

汽车 HMI 设计的发展趋势与设计要点

一、汽车HMI设计的发展历程与现状 汽车人机交互界面&#xff08;HMI&#xff09;设计经历了从简单到复杂、从单一到多元的演变过程。2012年以前&#xff0c;汽车HMI主要依赖物理按键进行操作&#xff0c;交互方式较为单一。随着特斯拉Model S的推出&#xff0c;触控屏逐渐成为…

《AI大模型应知应会100篇》第56篇:LangChain快速入门与应用示例

第56篇&#xff1a;LangChain快速入门与应用示例 前言 最近最火的肯定非Manus和OpenManus莫属&#xff0c;因为与传统AI工具仅提供信息不同&#xff0c;Manus能完成端到端的任务闭环。例如用户发送“筛选本月抖音爆款视频”&#xff0c;它会自动完成&#xff1a; 爬取平台数据…

Java 大视界 -- Java 大数据在智能农业无人机植保作业路径规划与药效评估中的应用(165)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

哈希表系列一>两数之和

目录 题目&#xff1a;方法&#xff1a;暴力代码&#xff1a;优化后代码&#xff1a; 题目&#xff1a; 链接: link 方法&#xff1a; 暴力代码&#xff1a; public int[] twoSum(int[] nums, int target) {解法一&#xff1a;暴力解法&#xff1a;int n nums.length;for(int…

CAD插件实现:自动递增编号(前缀、后缀、位数等)——CADc#实现

cad中大量输入一定格式的递增编号时&#xff0c;可用插件实现&#xff0c;效果如下&#xff1a; ①本插件可指定数字位数、起始号码、加前缀、后缀、文字颜色等&#xff08;字体样式和文字所在图层为cad当前图层和当前字体样式&#xff09;。 ②插件采用Jig方式&#xff0c;即…

C语言--回文字符串

输入&#xff1a;字符串&#xff0c;判断是否是回文字符串&#xff0c;例如abcba输出Yes 输出&#xff1a;是否 代码 思路&#xff1a;使用两个指针分别指向头和尾&#xff0c;依次对比第一个元素和最后一个元素&#xff0c;第二个和倒数第二个元素&#xff0c;如果遇到不相同…

Coco-AI 支持嵌入,让你的网站拥有 AI 搜索力

在之前的实践中&#xff0c;我们已经成功地把 Hexo、Hugo 等静态博客和 Coco-AI 检索系统打通了&#xff1a;只要完成向量化索引&#xff0c;就可以通过客户端问答界面实现基于内容的智能检索。 这一层已经很好用了&#xff0c;但总觉得少了点什么—— 比如用户还得专门打开一…

TRDI 公司的RiverPro 和 RioPro ADCP 用户指南

TRDI 公司 RiverPro 和 RioPro ADCP 用户指南 简介第一章 - 概述第二章 - 安装第三章 - 采集数据第四章 - 维护第五章 - 测试RIVERPRO/RIOPRO第六章 - 故障排除第七章 - 将系统返回TRDI进行维修第八章 - 规格第九章 - 命令第十章 - 输出数据格式附录A-合规通知首次完整翻译《Ri…

OpenCV 图形API(11)对图像进行掩码操作的函数mask()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 描述 对矩阵应用掩码。 该函数mask设置来自给定矩阵的值&#xff0c;如果掩码矩阵中对应的像素值设为true&#xff0c;否则将矩阵的值设为0。 支持的源矩阵…

使用C#写的一个Kafka的使用工具

由于offset不支持通过界面推送数据&#xff0c;所以我写了一个kafka的连接工具&#xff0c;能够直接从界面推送数据&#xff0c;方便使用。由于使用的是C#写的&#xff0c;所以比offset要流畅的多。 1、数据源连接 2、获取集群的topic 3、点击获取数据能够获取最新的100条数…

【通知】STM32MP157驱动开发课程全新升级!零基础入门嵌入式Linux驱动,掌握底层开发核心技能!

在嵌入式Linux系统开发中&#xff0c;驱动程序开发是一项关键技术&#xff0c;它作为硬件与软件之间的桥梁&#xff0c;实现了操作系统对硬件设备的控制。相较于嵌入式Linux应用开发&#xff0c;驱动开发由于涉及底层硬件且抽象程度较高&#xff0c;往往让初学者感到难度较大。…

飞浆PaddlePaddle 猫狗数据大战

猫狗数据大战 1 数据集的准备以及处理操作1.1 数据集1.2 文件解压操作&#xff08;python&#xff09; 1.3 数据的分类1.4 创建训练集和测试集 2 网络构建CNN版本--DeepID 人脸识别网络结构DeepID 与 CNN 网络结构的差异 3 深度学习模型训练和推理的核心设置4 制图5 训练6 预测…

使用高德api实现天气查询

创建应用获取 Key 天气查询-基础 API 文档-开发指南-Web服务 API | 高德地图API 代码编写 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…

Could not find artifact com.microsoft.sqlserver:sqljdbc4:jar:4.0 in central

具体错误 [ERROR] Failed to execute goal on project datalink-resource: Could not resolve dependencies for project com.leon.datalink:datalink-resource:jar:1.0.0: Could not find artifact com.microsoft.sqlserver:sqljdbc4:jar:4.0 in central (https://repo.maven…

Express学习笔记(三)——使用 Express 写接口

目录 1. 创建基本的服务器 2. 创建 API 路由模块 3. 编写 GET 接口 4. 编写 POST 接口 5. CORS 跨域资源共享 5.1 接口的跨域问题 5.2 使用 cors 中间件解决跨域问题 5.3 什么是 CORS 5.4 CORS 的注意事项 5.5 CORS 响应头部 - Access-Control-Allow-Origin 5.6 COR…

【HarmonyOS Next之旅】DevEco Studio使用指南(十)

目录 1 -> Optimize Imports功能 2 -> 父/子类快速跳转 3 -> 查看接口/类的层次结构 4 -> 代码自动补全 1 -> Optimize Imports功能 使用编辑器提供的Optimize Imports&#xff0c;可以快速清除未使用的import&#xff0c;并根据设置的规则对import进行合并…

java并发编程-并发容器

并发容器 CopyOnWriteArrayListCopyOnWriteArraySetConcurrentHashMapConcurrentSkipListMap迭代器的fail-fast与fail-safe机制应用场景 CopyOnWriteArrayList 线程不安全容器&#xff1a;ArrayList代替Vector、synchronizedList适用于读多写少的场景&#xff0c;对读操作不加…

PPT助手:一款集计时、远程控制与多屏切换于一身的PPT辅助工具

PPT助手&#xff1a;一款集计时、远程控制与多屏切换于一身的PPT辅助工具 &#x1f4dd;&#x1f3a4; 在现代化的演讲和演示中&#xff0c;如何高效地控制PPT进程、保证展示的流畅性与精准性&#xff0c;成为了每个演讲者必须面对的挑战。无论是商务汇报、学术演讲&#xff0…