Http协议报文格式

article/2025/9/12 15:24:17

一、整体介绍

Http协议在传输层基于TCP协议,在Http1.1之前每次请求在TCP层都需进行一轮连接和释放(三次握手、四次握手),从Http1.1开始默认使用长连接。
Http报文分为两种,请求报文和响应报文,大致格式如下:

1.请求报文结构:

请求行     {     请求方法(get/post等)+     URL     +     协议版本号     }     
+    头部        {     按照规范,根据自己需要来选择性添加     }
+    包体        {     即数据内容,post请求时,这部分才有数据;get请求时,数据附在URL参数里,格式为【URL?参数名=参数值】     }

2.响应报文格式

状态行     {     协议版本号     +     状态码     +     状态码说明     }     
+    头部        {     按照规范,根据自己需要来选择性添加     }
+    包体        {     一般为服务端返回给客户端的数据     }

#一、请求报文

结构构成:请求行 + 请求头部 + 请求数据

1.请求行 = 请求方法字段 + URL字段 + HTTP协议版本字段

##.请求方法

HTTP协议的请求方法有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。GET和POST是最常用的请求方法。
&&. GET请求
        使用GET方法时,请求参数和对应的值附加在URL后面,利用一个问号(“?”)代表URL的结尾与请求参数的开始,传递参数长度受限制。这种方式不适合传送私密数据。
GET方式的请求一般不包含”请求数据”部分。
        由于不同的浏览器对地址的字符限制也有所不同,长度一般不能超过4KB,所以如果需要传送大量数据的时候,也不适合使用GET方式。
&&. POST请求
POST方式对传送的数据大小没有限制, 可以允许客户端给服务器提供信息较多。
POST方法将请求参数封装在HTTP请求数据中,不会显示在URL中。

##.URL

URL:统一资源定位符,是一种资源位置的抽象唯一识别方法。
组成:<协议>://<主机>:<端口>/<路径>
端口和路径有事可以省略(HTTP默认端口号是80,Https默认端口443)

##.HTTP协议版本字段

指定使用的Http协议版本
HTTP/1.1的优化
        长连接 : 在HTTP/1.0中,默认使用的是短连接,也就是说每次请求都要重新建立一次连接。HTTP是基于TCP/IP协议的,每一次建立或者断开连接都需要三次握手四次挥手的开销,如果每次请求都要这样的话,开销会比较大。因此最好能维持一个长连接,可以用个长连接来发多个请求。HTTP1.1起,默认使用长连接 ,默认开启Connection: keep-alive。 HTTP/1.1的持续连接有非流水线方式和流水线方式 。流水线方式是客户在收到HTTP的响应报文之前就能接着发送新的请求报文。与之相对应的非流水线方式是客户在收到前一个响应后才能发送下一个请求。
HTTP2.0的优化
    使用二进制格式传递数据:HTTP1.x的解析是基于文本, 传输的是一堆ASCII码串 。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。
    多路复用:在同一个TCP连接中,同一时刻可以发送多个请求和响应,下一次的请求不需要等待上一个响应来之后再发送。但响应的顺序是不变的,FIFO(先进先出)。2.0之前是同一个连接只能用一次, 如果开启了keep-alive,虽然可以用多次,但是同一时刻只能有一个HTTP请求。
    HTTP2.0的多路复用主要是指:因为http2.0的传输是基于二进制帧的。每一个TCP连接中承载了多个双向流通的流,每一个流都有一个独一无二的标识和优先级,而流就是由二进制帧组成的。二进制帧的头部信息会标识自己属于哪一个流,所以这些帧是可以交错传输,然后在接收端通过帧头的信息组装成完整的数据。这样就解决了线头阻塞的问题,同时也提高了网络速度的利用率。
    header压缩,HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用HPACK算法对header的数据进行压缩,避免了重复header的传输,又减小了需要传输数据的大小,基本原理是客户端和服务端分别缓存一份索引表,如果头部存在于索引表,则用对应的索引值;否则进行霍夫曼编码,并加入索引表。

##2.请求头部

请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔。请求头部通知服务器有关于客户端请求的信息。常见头部字段:

Cache-Control    控制缓存的行为,一般包括一个“max-age=3400”的值,代表缓存的有效时间为资源返回后的3400秒之内
Connection    逐跳首部、连接的管理。如果值为其他字段的名字,代表代理服务器转发时将
Accept    用户代理可处理的媒体类型
Accept-Charset    优先的字符集
Accept-Encoding    优先的内容编码
Authorization    Web认证信息
Expect    期待服务器的特定行为
From    用户的电子邮箱地址
Host    请求资源所在的服务器主机名/域名
If-Match    比较实体标记(Etag)
If-Modified-Since    比较资源的更新时间,出现在条件get请求中
If-None-Match    比较实体标记(与If-Match相反)
If-Range    资源未更新时发送实体Byte的范围请求
If-Unmodified-Since    比较资源的更新时间(与If-Modified-Since相反)
Max-Forwards    最大传输逐跳数
Proxy-Authorization    代理服务器要求客户端的认证信息
Range    实体的字节范围请求
Referer    请求中URI的原始获取方
TE    传输编码的优先级
User-Agent    HTTP客户端程序的信息。如果是浏览器则是对应浏览器的用户代理字符串
Content-Encoding    实体主体适用的编码方式
Content-length    实体主体的大小(单位:字节)
Content-Type    实体主体的媒体类型

空行

请求头部的最后会有一个空行,表示请求头部结束,接下来为请求数据。

##3.请求数据

请求数据不在GET方法中使用,而在POST方法中使用。POST方法适用于需要客户填写表单的场合。与请求数据相关的最高频使用的请求头部是Cntent-Type和Content-Length,分别代表数据类型和数据长度。

部分常用的Content-Type:

text/plain :纯文本格式 .txt

text/xml : XML格式 .xml

image/gif :gif图片格式 .gif

image/jpeg :jpg图片格式 .jpg

image/png:png图片格式 .png

audio/mp3 : 音频mp3格式 .mp3

audio/rn-mpeg :音频mpga格式 .mpga

video/mpeg4 : 视频mp4格式 .mp4

video/x-mpg : 视频mpa格式 .mpg

video/x-mpeg :视频mpeg格式 .mpeg

video/mpg : 视频mpg格式 .mpg

以application开头的媒体格式类型:

application/xhtml+xml :XHTML格式

application/xml : XML数据格式

application/atom+xml :Atom XML聚合格式

application/json : JSON数据格式

application/pdf :pdf格式

application/msword : Word文档格式

application/octet-stream : 二进制流数据(如文件下载)

#二.响应报文

HTTP响应报文 = 状态行(status line) + 响应头部(headers) + 响应数据(也叫响应体或响应正文)(response body)

##1.状态行

状态行 = 协议版本 + 状态码 + 状态码描述。
其中协议版本与请求报文一致,状态码描述是对状态码的简单描述。
HTTP状态码
状态码由三位数字组成,第一位数字表示响应的类型,常用的状态码有五大类如下所示:
  1xx:表示服务器已接收了客户端请求,客户端可继续发送请求;
  2xx:表示服务器已成功接收到请求并进行处理;
  3xx:表示服务器要求客户端重定向;
  4xx:表示客户端的请求有非法内容;
  5xx:表示服务器未能正常处理客户端的请求而出现意外错误;

##2.响应头部

常见响应头部及描述如下:
Cache-Control    控制缓存的行为,一般包括一个“max-age=3400”的值,代表缓存的有效时间为资源返回后的3400秒之内
Connection    逐跳首部、连接的管理。如果值为其他字段的名字,代表代理服务器转发时将不再携带该字段。如果值为close或Keep-Alive则分别表示连接为短/长连接
Accept-Ranges    是否接受字节范围请求
Age    推算资源创建经过时间
ETag    资源的匹配信息
Location    令客户端重定向至指定URI
Proxy-Authenticate    代理服务器对客户端的认证信息
Server    HTTP服务器的安装信息
Vary    代理服务器缓存的管理信息
WWW-Authenticate    服务器对客户端的认证信息
Content-Encoding    实体主体适用的编码方式
Content-length    实体主体的大小(单位:字节)
Content-Type    实体主体的媒体类型

空行

响应头部的最后会有一个空行,表示响应头部结束,接下来为响应数据。与请求报文一致。

##3.响应体

用于存放需要返回给客户端的数据信息。

#头部字段补充说明

HTTP首部字段类型分为四种:

1、通用首部字段(General Header Feilds)
即请求报文和响应报文双方都会使用的首部
2、请求首部字段(Request Header Fields)
从客户端向服务器发送请求时使用的首部。补充了请求的附加内容、客户端信息、响应内容想关优先级等信息。
3、响应首部字段(Response Header Fields)
从服务器向客户端返回响应时使用的首部。补充了相应的附加内容
4、实体首部字段(Entity Header Fields)
针对请求报文和响应报文的实体部分使用的首部。补充了资源内容更新时间等与实体有关的信息。
注意:仍然是报文的头部字段,只是针对报文数据体作相关说明,并不会存储在报文数据体里。

以下为HTTP/1.1所有头部字段

1.通用头部字段
Cache-Control    控制缓存的行为,一般包括一个“max-age=3400”的值,代表缓存的有效时间为资源返回后的3400秒之内
Connection    逐跳首部、连接的管理。如果值为其他字段的名字,代表代理服务器转发时将不再携带该字段。如果值为close或Keep-Alive则分别表示连接为短/长连接
Date    创建报文的日期时间
Pragma    报文指令。是HTTP/1.1之前版本的遗留字段,仅作为与HTTP/1.0的向后兼容而定义
Trailer    报文末端的首部一览
Transfer-Encoding    指定报文主体的传输编码方式
Upgrade    升级为其他协议
Via    代理服务器的相关信息。报文经过代理或网关时,会先在首部字段Via中附加该服务器的信息,然后再进行转发,目的是追踪请求和响应报文的传输路径
Warning    错误通知
2.请求头部字段
Accept    用户代理可处理的媒体类型
Accept-Charset    优先的字符集
Accept-Encoding    优先的内容编码
Authorization    Web认证信息
Expect    期待服务器的特定行为
From    用户的电子邮箱地址
Host    请求资源所在的服务器主机名/域名
If-Match    比较实体标记(Etag)
If-Modified-Since    比较资源的更新时间,出现在条件get请求中
If-None-Match    比较实体标记(与If-Match相反)
If-Range    资源未更新时发送实体Byte的范围请求
If-Unmodified-Since    比较资源的更新时间(与If-Modified-Since相反)
Max-Forwards    最大传输逐跳数
Proxy-Authorization    代理服务器要求客户端的认证信息
Range    实体的字节范围请求
Referer    请求中URI的原始获取方
TE    传输编码的优先级
User-Agent    HTTP客户端程序的信息。如果是浏览器则是对应浏览器的用户代理字符串
3.响应头部字段
Accept-Ranges    是否接受字节范围请求
Age    推算资源创建经过时间
ETag    资源的匹配信息
Location    令客户端重定向至指定URI
Proxy-Authenticate    代理服务器对客户端的认证信息
Server    HTTP服务器的安装信息
Vary    代理服务器缓存的管理信息
WWW-Authenticate    服务器对客户端的认证信息
4.实体头部字段
Allow    资源可支持的HTTP方法
Content-Encoding    实体主体适用的编码方式
Content-language    实体主体的自然语言
Content-length    实体主体的大小(单位:字节)
Content-MD5    实体主体的报文摘要
Content-Range    实体主体的位置范围
Content-Type    实体主体的媒体类型
Expires    实体主体过期的日期时间
Last-Modified    资源的最后修改日期时间
(声明:部分图片引用自网络,侵删!)

http://chatgpt.dhexx.cn/article/QiH3yKL7.shtml

相关文章

CAN报文

CAN报文 Bit Numbering是汽车网络数据库用以辅助描述信号的专用术语&#xff0c;具体含义是位的编号顺序。 lsb0 bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 LSB 是least significant bit&#xff0c;最低有效位。 msb0 bit0 bit1 bit2 bit3 bit4 bit5 bit6 bit7 MSB是Most Si…

TCP报文头部

TCP包头详解 主要学习端口号、三次握手、四次挥手 TCP包头 TCP报文固定长度20字节可变长度 TCP包头如下图所示&#xff1a; 源端口、目标端口&#xff1a;计算机上的进程要和其他进程通信是要通过计算机端口的&#xff0c;而一个计算机端口某个时刻只能被一个进程占用&…

ICMP报文

紫色代表一级目录 粉红代表二级目录 蓝色代表三级目录 红色代表关键字 橙色代表说明 ICMP报文   为了更有效地转发 IP 数据报和提高交付成功的机会&#xff0c;在网际层使用了网际控制报文协议 ICMP (Internet Control Message Protocol)。   ICMP 是互联网的标准协议。  …

常见网络报文

TCP报文 1、端口号&#xff1a;用来标识同一台计算机的不同的应用进程。 1)源端口&#xff1a;源端口和IP地址的作用是标识报文的返回地址。 2)目的端口&#xff1a;端口指明接收方计算机上的应用程序接口。 2、序号和确认号&#xff1a;是TCP可靠传输的关键部分。序号是本报文…

报文、报文段、数据报、数据包、帧的概念区别

报文&#xff08;message&#xff09;—— 应用层 是网络中交换与传输的数据单元&#xff08;站点一次性要发送的数据块&#xff09;。报文包含了将要发送的完整的数据信息&#xff0c;其长短不一致。报文在传输过程中会不断的封装成分组、包、帧来传输&#xff0c;封装的方式…

报文、报文段、分组、包、数据报、帧、数据流的概念区别

1.报文(message) 我们将位于应用层的信息分组称为报文。报文是网络中交换与传输的数据单元&#xff0c;也是网络传输的单元。报文包含了将要发送的完整的数据信息&#xff0c;其长短不需一致。报文在传输过程中会不断地封装成分组、包、帧来传输&#xff0c;封装的方式就是添加…

关于SPSS16的安装及教程

放SPSS安装文件 链接&#xff1a;https://pan.baidu.com/s/14QHqvok2IItQvV_72VPtOg 提取码&#xff1a;ee0k 接下来按照如下步骤操作就可以 按照上面的操作就可以完成安装了&#xff0c;这个属于比较老的SPSS版本&#xff0c;但是比较稳定。

【SPSS统计分析】SPSS19.0简体中文版安装教程(附SPSS19.0简体中文版下载)

spss19.0中文版是一款专业数据统计软件,受到各种社会学科的研究生、研究员的欢迎。软件能够对信息的采集、处理、分析进行全面评估和预测。spss19.0中文版新增加了广义线性混合模型、自动线性模型、一个统计网页入口portal和直复营销direct marketing功能等。另外,IBM 针对SP…

最新版最简单SPSS 26安装详细教程

SPSS为IBM公司推出的一系列用于统计学分析运算、数据挖掘、预测分析和决策支持任务的软件产品及相关服务的总称&#xff0c;有Windows和Mac OS X等版本。下面介绍安装教程 下载地址&#xff1a; 链接&#xff1a;SPSS下载地址 &#xff08;要是没有跳转到网盘请复制这个链接到…

spss20安装许可证代码_SPSS 22下载安装教程

软件下载 长按选择复制链接 [名称]:SPSS 22 [语言]:简体中文 [安装环境]:Windows [下载链接]: https://pan.baidu.com/s/1q4t2PtmyX2EcQy8E3CQnxg [提取码]: 6huj 链接失效、安装有问题请加微信:593003758拉你进软件资源小助手交流群 安装步骤 1.找到下载好的软件压缩包,…

spss statistics26 下载及安装教程

下载 解压后得到两个文件 点击下面那个&#xff0c;找到 “Windows”——“setup.exe”&#xff0c;双击打开 安装 1. 点击圈出的部分&#xff0c;开始安装 2. 一直点击下一步 / 我同意&#xff0c;直到如下界面 可以修改安装路径 3. 一直点击下一步&#xff0c;然后安装即可…

spss27软件安装包下载spss27安装教程

安装 步骤 1、将下载好的安装包 鼠标右击&#xff0c;选择 解压 2、解压得到一个安装文件夹&#xff0c;打开它 3、鼠标右击 SPSS_Statistics_Win64 &#xff0c;选择 以管理员身份运行 4、下一步 5、选择我接受&#xff0c;下一步 6、点击更改&#xff0c;选择安装位置&#…

SPSS modeler for mac安装教程

一、下载 在百度搜一下&#xff0c;随便找个网站普通下载 我找的是这个 https://www.jb51.net/softs/679885.html 安装包较大&#xff0c;请耐心等待下载完成 二、解压 下载下来有一堆安装包&#xff0c;直接在最外层的文件夹选择提取。 解压时可能会让输入密码&#xff…

SPSS 25软件安装教程

​​​​​​​关注公众号&#xff0c;免费获取资料 简介&#xff1a; SPSS&#xff0c;统计产品与服务解决方案软件。最初软件全称为“社会科学统计软件包”&#xff08;SolutionsStatistical Package for the Social Sciences&#xff09;&#xff0c;但是随着SPSS产品服务领…

SPSS-Modeler安装

1. 安装SPSS 64位软件包&#xff0c;解压安装安装步骤即可&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1t48M16ZUdpnfWemceOQc8g 提取码&#xff1a;ma0a 补充具体安装步骤 解压SPSS.Modeler.v18.x64.iso 得到&#xff1a; 打开使用说明&#xff1a; 根据步骤依次…

​​spss13.0 附安装教程

​​spss13.0全称又叫做Statistical Package for the Social Sciences 13,是一款简单实用的统计分析软件,采用最新的SPSS的超强统计的软体来帮助用户进行分析您的资料、使用户快速的解放您的双手,让操作等更加的灵活,轻松,因此收到各界社会学科的研究员的喜爱。除了使用体…

1、SPSS 25的安装

目录 一、简介 二、竞争优势 三、安装步骤 一、简介 SPSS 是一款用于Windows操作系统的数据和科学图形的数值分析软件&#xff0c;能够为用户提供多样的数据统计、处理、报告等功能&#xff0c;还能根据数据帮用户生成离散图、折线图等图形&#xff0c;以更加直观的方式向你…

spss20安装许可证代码_SPSS23安装教程

SPSS23(32位)百度网盘下载地址: https://pan.baidu.com/s/1y9KOdmUjePHT9dT225u__w SPSS23(64位)百度网盘下载地址: https://pan.baidu.com/s/12AhkbOFoqU73KdXwokisyQ 软件介绍 SPSS是一款非常优秀的统计分析工具,提供了大量的信息和文档,其中包括插件、工具、命令语法参考…

SPSS 下载-安装

一、SPSS下载 百度网盘资源SPSS v26.0【下述安装步骤匹配】 链接&#xff1a;https://pan.baidu.com/s/1p08QBJ4GlHMARpnUK4SDiw 提取码&#xff1a;ylpa 二、安装步骤 1. 解压后按顺序打开文件 【SPSS v26.0】-->【IBM SPSS Statistics v26.0】-->【Windows】-->【s…

SPSS 26 资源及安装教程

一、软件简介 SPSS&#xff08;Statistical Product and Service Solutions&#xff09;&#xff0c;“统计产品与服务解决方案”软件。最初软件全称为“社会科学统计软件包”&#xff08;Solutions Statistical Package for the Social Sciences&#xff09;&#xff…