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数据传输的几个关键字Header
本文着重针对http在传输数据时的几种封装方式进行描述。 1. Content-Type(描述body内容类型以及字符编码) HTTP的Content-Type用于定义数据传输的媒体类型(MIME类型),主要分为以下几类: (一)、基础文本类型 text/plain …...
二极管正负极区分
二极管正负极区分 二极管是一种具有单向导电性的半导体器件,正确区分正负极对于其使用非常重要。以下是几种常见的二极管正负极区分方法: 1. 外观标识 有标记的二极管 色环或色点:许多二极管在表面会有一个色环或色点,这个标记…...
CyclicBarrier、Semaphore、CountDownLatch的区别,适用场景
CyclicBarrier、Semaphore 和 CountDownLatch 是 Java 并发包中用于线程协作的工具类,它们虽然都与线程同步相关,但设计目的和使用场景有显著差异。以下是它们的核心区别和典型应用场景: 1. CountDownLatch 核心机制 一次性计数器…...
【c++深入系列】:类与对象详解(中)
🔥 本文专栏:c 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 不是因为看到希望才坚持,而是坚持了才能看到希望 那么上一篇博客我讲解了什么是类和对象以及类和对象是怎么定义的࿰…...
解锁界面设计密码,打造极致用户体验
界面设计是对软件、网站、移动应用等产品的用户界面进行设计的过程,旨在为用户提供美观、易用、高效的交互体验。以下是关于界面设计的一些主要方面: 一、设计原则 用户中心原则:以用户为中心,了解用户的需求、期望、行为和习惯…...
用Python和Pygame创造粉色粒子爱心:3D渲染的艺术
引言 在计算机图形学中,3D效果的2D渲染是一个迷人的领域。今天,我将分享一个使用Python和Pygame库创建的粉色粒子爱心效果。这个项目不仅视觉效果惊艳,而且代码简洁易懂,非常适合图形编程初学者学习3D渲染的基础概念。 项目概述…...
汽车 HMI 设计的发展趋势与设计要点
一、汽车HMI设计的发展历程与现状 汽车人机交互界面(HMI)设计经历了从简单到复杂、从单一到多元的演变过程。2012年以前,汽车HMI主要依赖物理按键进行操作,交互方式较为单一。随着特斯拉Model S的推出,触控屏逐渐成为…...
《AI大模型应知应会100篇》第56篇:LangChain快速入门与应用示例
第56篇:LangChain快速入门与应用示例 前言 最近最火的肯定非Manus和OpenManus莫属,因为与传统AI工具仅提供信息不同,Manus能完成端到端的任务闭环。例如用户发送“筛选本月抖音爆款视频”,它会自动完成: 爬取平台数据…...
vue-office 支持预览多种文件(docx、excel、pdf、pptx)预览的vue组件库
官网地址:https://github.com/501351981/vue-office 支持多种文件(docx、excel、pdf、pptx)预览的vue组件库,支持vue2/3。也支持非Vue框架的预览。 1.在线预览word文件(以及本地上传预览) 1.1:下载组件库 npm inst…...
Java 大视界 -- Java 大数据在智能农业无人机植保作业路径规划与药效评估中的应用(165)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
哈希表系列一>两数之和
目录 题目:方法:暴力代码:优化后代码: 题目: 链接: link 方法: 暴力代码: public int[] twoSum(int[] nums, int target) {解法一:暴力解法:int n nums.length;for(int…...
【SPP】深入解析蓝牙 L2CAP 协议在SPP中的互操作性要求
在蓝牙协议体系中,L2CAP(Logical Link Control and Adaptation Protocol)作为基带协议与高层协议之间的桥梁,承担着数据分帧、协议复用、QoS协商等核心功能。当涉及串行端口通信时,L2CAP的规范实现直接决定了设备间数据传输的可靠性、效率及兼容性。本文基于《Serial Port…...
CAD插件实现:自动递增编号(前缀、后缀、位数等)——CADc#实现
cad中大量输入一定格式的递增编号时,可用插件实现,效果如下: ①本插件可指定数字位数、起始号码、加前缀、后缀、文字颜色等(字体样式和文字所在图层为cad当前图层和当前字体样式)。 ②插件采用Jig方式,即…...
Spring | Spring、Spring MVC 和 Spring Boot 的区别
关注:CodingTechWork 引言 在 Java 开发领域,Spring、Spring MVC 和 Spring Boot 是三个经常被提及的概念。它们之间既有联系又有区别,对于初学者来说可能会感到困惑。本文将详细介绍它们的区别,并通过示例代码帮助读者更好地理解…...
观察者模式在Java微服务间的使用
一.、使用RabbitMQ来实现 (1) 生产者(订单微服务) import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.stereotype.Service;Service public class OrderService {private final RabbitTemplate rabbitTemplate;…...
C语言--回文字符串
输入:字符串,判断是否是回文字符串,例如abcba输出Yes 输出:是否 代码 思路:使用两个指针分别指向头和尾,依次对比第一个元素和最后一个元素,第二个和倒数第二个元素,如果遇到不相同…...
【云计算物理网络】数据中心网络架构设计
云计算的物理基础:数据中心网络架构设计 一、技术背景:从“三层架构”到“云原生网络”二、技术特点:云数据中心网络的四大支柱三、技术细节:CLOS架构的实现挑战四、未来方向:从“连接设备”到“感知服务”结语&#x…...
Coco-AI 支持嵌入,让你的网站拥有 AI 搜索力
在之前的实践中,我们已经成功地把 Hexo、Hugo 等静态博客和 Coco-AI 检索系统打通了:只要完成向量化索引,就可以通过客户端问答界面实现基于内容的智能检索。 这一层已经很好用了,但总觉得少了点什么—— 比如用户还得专门打开一…...
批处理脚本的主要解析规则
批处理脚本的主要解析规则 批处理脚本(Batch files)有一套独特的解析规则,这些规则在很多情况下不太直观,但了解它们对于编写可靠的脚本至关重要。以下是最重要的一些规则: 1. 变量扩展规则 标准变量扩展 (%变量%) 解析时扩展:…...
TRDI 公司的RiverPro 和 RioPro ADCP 用户指南
TRDI 公司 RiverPro 和 RioPro ADCP 用户指南 简介第一章 - 概述第二章 - 安装第三章 - 采集数据第四章 - 维护第五章 - 测试RIVERPRO/RIOPRO第六章 - 故障排除第七章 - 将系统返回TRDI进行维修第八章 - 规格第九章 - 命令第十章 - 输出数据格式附录A-合规通知首次完整翻译《Ri…...
Linux 基础入门操作 前言 linux操作指令介绍
1 linux 目录介绍 Linux 文件系统采用层次化的目录结构,所有目录都从根目录 / 开始 1.1 核心目录 / (根目录) 整个文件系统的起点、包含所有其他目录和文件 /bin (基本命令二进制文件) 存放系统最基本的shell命令:如 ls, cp, mv, rm, cat 等&#…...
【总结】SQL注入防护手段
1、对提交的数据进行数据类型判断,比如id值必须是数字:is_numeric($id) 2、对提交的数据进行正则匹配,禁止出现注入语句,比如union、or、and等 3、对提交数据进行特殊符号转义,比如单引号、双引…...
OpenCV 图形API(11)对图像进行掩码操作的函数mask()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 描述 对矩阵应用掩码。 该函数mask设置来自给定矩阵的值,如果掩码矩阵中对应的像素值设为true,否则将矩阵的值设为0。 支持的源矩阵…...
使用C#写的一个Kafka的使用工具
由于offset不支持通过界面推送数据,所以我写了一个kafka的连接工具,能够直接从界面推送数据,方便使用。由于使用的是C#写的,所以比offset要流畅的多。 1、数据源连接 2、获取集群的topic 3、点击获取数据能够获取最新的100条数…...
【通知】STM32MP157驱动开发课程全新升级!零基础入门嵌入式Linux驱动,掌握底层开发核心技能!
在嵌入式Linux系统开发中,驱动程序开发是一项关键技术,它作为硬件与软件之间的桥梁,实现了操作系统对硬件设备的控制。相较于嵌入式Linux应用开发,驱动开发由于涉及底层硬件且抽象程度较高,往往让初学者感到难度较大。…...
MCP协议java开发的servers,已开源
访问地址: mcp-server-java 已实现的filesystem提高性能和效率,比Python的操作更顺畅。java实现,让部署更容易。...
飞浆PaddlePaddle 猫狗数据大战
猫狗数据大战 1 数据集的准备以及处理操作1.1 数据集1.2 文件解压操作(python) 1.3 数据的分类1.4 创建训练集和测试集 2 网络构建CNN版本--DeepID 人脸识别网络结构DeepID 与 CNN 网络结构的差异 3 深度学习模型训练和推理的核心设置4 制图5 训练6 预测…...
嵌入式硬件篇---JSON通信以及解析
文章目录 前言一、JSON特点语法简单数据格式灵活轻量化跨语言使用二、JSON数据结构对象数组三、JSON在单片机之间通信的应用数据封装与传输四、JSON示例代码五、JSON在上位机与单片机之间通信的应用数据交互六、JSON示例代码七、JSON解析与生成解析生成八、Python中的数据解析1…...
递归典例---汉诺塔
https://ybt.ssoier.cn/problem_show.php?pid1205 #include<bits/stdc.h> #define endl \n #define pii pair<int,int>using namespace std; using ll long long;void move(int n,char a,char b,char c) // n 个盘子,通过 b,从 a 移动到 …...
使用高德api实现天气查询
创建应用获取 Key 天气查询-基础 API 文档-开发指南-Web服务 API | 高德地图API 代码编写 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wid…...
