7 HTTP 的报文
1 报文结构
TCP的报文
- TCP头部数据:20字节,发送方的端口号、接收方的端口号、包序号、标志位。
- 实际传输的数据:通常大小是 1460 字节
HTTP协议的报文
起始行+头部字段集合+消息正文
- 起始行(strat line):描述请求或响应的基本信息
- 头部字段集合(header):使用 key-value 形式更详细地说明报文,前面这两部分合称请求头或响应头
- 消息正文(entity):实际传输的数据,二进制数据,也叫实体或body
报文必须有 header,但是可以没有body(如 get 请求报文),在 header 之后必须要有一个“空行”,即“CRLF”,十六进制的“0D0A”。
各个web服务器都不允许过大的请求头,因为头部太大会占用太多服务器资源,影响运行效率。

2 请求行:request line
请求方法+请求目标+版本号,空格隔开,CRLF 换行结束。
- 请求方法:是一个动词,如 get/post ,表示对资源的操作
- 请求目标:通常是一个 URI,标记了 请求方法要操作的资源
- 版本号:表示报文使用的HTTP协议版本
3 状态行:status line
版本号+状态码+原因
- 版本号:表示报文使用的 HTTP 协议版本
- 状态码:三位数,如 200 是成功,500 是服务器错误
- 原因:作为数字状态码补充,是更为详细的解释文字,帮助人理解原因
- 以上三部分空格分隔,CRLF 换行结束

4 头部字段
- 请求行或状态行再加上头部字段集合就构成了 HTTP 报文里完整的请求头 或 响应头。
- 头部字段 是 key-value 的形式,key和value之间用 “:” 分隔,最后用 CRLF 换行表示字段结束
- HTTP 头部支持自定义


使用头字段的注意点:
- 字段名 不区分大小写
- 字段名 不允许出现空格
- 字段名后面必须紧接着 “:”,不能有空格,而 “:” 后的字段值前可以有多个空格
- 字段的顺序是没有意义的,可以任意排列不影响语义
- 字段原则上不能重复,除非这个字段本身的语义允许
5 常用头字段
种类很多,基本分为 四大类:
- 通用字段:在请求头和响应头里都可以出现
- 请求字段:只能出现在请求头里,补充说明请求信息或额外条件
- 响应字段:仅能出现在响应头里,补充说明响应报文的信息
- 实体字段:实际上属于通用字段,但是专门描述 body 的额外信息。
对报文的解析实际上就是对头字段的处理。
基本的头信息
1. Host 字段(必须)
- 请求字段,只能出现在请求头。
- 唯一一个 HTTP/1.1 规范里要求必须出现的字段,如果没有就是一个错误报文。
- Host 字段告诉请求应该由哪个主机来处理,当一台计算机上托管了多个虚拟主机,服务端就需要用 Host 字段来选择。
- Host 字段可以区分IP相同但是域名不同的网站。
2. Uesr-Agent
- 请求字段,只能出现在请求头。
- 使用一个字符串来描述发起HTTP请求的客户端,服务器可以依据它来返回最合适此浏览器显示的页面。
- 实际上每个浏览器自称 “chrome”,“Mozilla” 等,是这个字段越来越长却毫无意义。
3. Date 字段
- 通用字段,通常出现在响应头里。
- 表示HTTP 报文的创建时间。
- 和其他字段搭配绝对缓存策略。
4. Server 字段
- 响应字段,只能出现在响应头里。
- 告诉客户端当前正在提供Web服务的软件名称和版本号。
- 非必须,容易暴露信息给外界被黑客攻击。
- 一般会给出一个无关紧要的描述信息。
基本的实体字段
1. Content-length
- 表示报文里body的字段长度,也就是请求头或响应头空行后数据的长度。
- 服务器看到这个字段就知道后续有多少数据,可以直接接受。
- 没有这个字段,表示 body 是不定长的,需要使用 chunked 方式分段传输。
7 HTTP 的报文的更多相关文章
- 重温Http协议--请求报文和响应报文
http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...
- Tcp/ip 报文解析
在编写网络程序时,常使用TCP协议.那么一个tcp包到底由哪些东西构成的呢?其实一个TCP包,首先需要通过IP协议承载,而IP报文,又需要通过以太网传送.下面我们来看看几种协议头的构成 一 .Ethe ...
- 前端学HTTP之报文首部
前面的话 首部和方法配合工作,共同决定了客户端和服务器能做什么事情.在请求和响应报文中都可以用首部来提供信息,有些首部是某种报文专用的,有些首部则更通用一些.本文将详细介绍HTTP报文中的首部 结构 ...
- [httpserver]如何解析HTTP请求报文
这个http server的实现源代码我放在了我的github上,有兴趣的话可以点击查看哦. 在上一篇文章中,讲述了如何编写一个最简单的server,但该程序只是接受到请求之后马上返回响应,实在不能更 ...
- dhcp协议交互报文
DHCP共有八种报文,分别为DHCP Discover.DHCP Offer.DHCP Request.DHCP ACK.DHCP NAK.DHCP Release.DHCP Decline.DHCP ...
- 前端学HTTP之报文起始行
前面的话 如果说HTTP是因特网的信使,那么HTTP报文就是它用来搬东西的包裹了.HTTP报文是在HTTP应用程序之间发送的简单的格式化数据块,每条报文都包含一条来自客户端的请求,或者一条来自服务器的 ...
- DNS报文格式(RFC1035)
一.域名和资源记录的定义 1.Name space definitions 2.资源记录定义(RR definitions) 2.1 格式 后面分析报文的时候详细解释. ...
- Jmeter+TCP\Scoket(8583)报文压力测试
Jmeter一般被用来测试HTTP协议,我第一次拿来测试socket协议,pos机传输报文为8583,协议属于socket,也是TCP协议的一种,网上有LR怎么测试8583报文,我就研究了一下怎么用J ...
- Java Web ——http协议响应报文
HTTP 响应报文 HTTP 响应报文由状态行.响应头部.空行 和 响应包体 4 个部分组成,如下图所示: 下面对响应报文格式进行简单的分析: 状态行:状态行由 HTTP 协议版本字段.状态码和状态码 ...
- ARP报文发送的可视化实现
一.安装VS2013,下载wpdpack,为VS2010配置WinpCap环境: ⑴首先在View中选择Property Manager,然后展开工程,再展开Debug|Win32 ,接着右击 Mir ...
随机推荐
- Jquery ajax方式提交表单
Jquery ajax方式提交表单,目前用过的有两种方式: 1.引人jquery.js和jquery.easyui.min.js后,用下面的方法: $('#checkForm1').form('sub ...
- 文心一言 VS 讯飞星火 VS chatgpt (96)-- 算法导论9.3 1题
一.用go语言,在算法 SELECT 中,输人元素被分为每组 5 个元素.如果它们被分为每组 7个元素,该算法仍然会是线性时间吗?证明:如果分成每组 3 个元素,SELECT 的运行时间不是线性的. ...
- 5分钟入门 next13
上半年vercel 推出了nextjs13 这个大版本,刚好最近有个c端的项目,所以就用了这个框架来写,技术体系基本也是文档提到的 tailwindcss + ts + swr + ssr ,总的来开 ...
- 解锁Java面试中的锁:深入了解不同类型的锁和它们的用途
简介 多线程编程在现代软件开发中扮演着至关重要的角色.它使我们能够有效地利用多核处理器和提高应用程序的性能.然而,多线程编程也伴随着一系列挑战,其中最重要的之一就是处理共享资源的线程安全性.在这个领域 ...
- 低代码平台如何借助Nginx实现网关服务
摘要:本文由葡萄城技术团队于博客园原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 在典型的系统部署架构中,应用服务器是一种软件或硬件系统, ...
- MySQL系列之读写分离架构——Atlas介绍、安装配置、Atlas功能测试、生产用户要求、Atlas基本管理、自动分表、关于读写分离建议
文章目录 1. Atlas介绍 2.安装配置 3. Atlas功能测试 4. 生产用户要求 5. Atlas基本管理 6. 自动分表 7. 关于读写分离建议 1. Atlas介绍 Atlas是由 Qi ...
- 云图说|初识API中心APIHub
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:API中心是为AP ...
- 虹科案例 | 丝芙兰xDomo:全球美妆巨头商业智能新玩法
全球美妆行业的佼佼者丝芙兰,其走向成功绝非仅依靠品牌知名度和营销手段.身为数据驱动型企业,2018年以来,丝芙兰就率先在行业内采用虹科提供的Domo商业智能进行数据分析和决策,并首先享受了运营优化.效 ...
- 关于通过StringTemplate模板生成xml转成excel后office无法打开的问题解决
说明:本人最近在着手实现导出日志数据,由于日志数据过多,在网上查找java 导出大量数据到excel的例子. 后发现园子里某位老哥通过StringTemplate模板生成excel格式的xml,这个思 ...
- 钉钉OA自定义审批流的创建和使用
前言 大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教. 钉钉作为一款办公软件,审批功能是它的核心功能 ...