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.mzph.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小节点内容。构建了一个英…