1 报文结构

TCP的报文

  • TCP头部数据:20字节,发送方的端口号、接收方的端口号、包序号、标志位。
  • 实际传输的数据:通常大小是 1460 字节

HTTP协议的报文

起始行+头部字段集合+消息正文

  1. 起始行(strat line):描述请求或响应的基本信息
  2. 头部字段集合(header):使用 key-value 形式更详细地说明报文,前面这两部分合称请求头响应头
  3. 消息正文(entity):实际传输的数据,二进制数据,也叫实体body

报文必须有 header,但是可以没有body(如 get 请求报文),在 header 之后必须要有一个“空行”,即“CRLF”,十六进制的“0D0A”。

各个web服务器都不允许过大的请求头,因为头部太大会占用太多服务器资源,影响运行效率。

2 请求行:request line

请求方法+请求目标+版本号,空格隔开,CRLF 换行结束。

  1. 请求方法:是一个动词,如 get/post ,表示对资源的操作
  2. 请求目标:通常是一个 URI,标记了 请求方法要操作的资源
  3. 版本号:表示报文使用的HTTP协议版本

3 状态行:status line

版本号+状态码+原因

  1. 版本号:表示报文使用的 HTTP 协议版本
  2. 状态码:三位数,如 200 是成功,500 是服务器错误
  3. 原因:作为数字状态码补充,是更为详细的解释文字,帮助人理解原因
  4. 以上三部分空格分隔,CRLF 换行结束

4 头部字段

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



使用头字段的注意点:

  1. 字段名 不区分大小写
  2. 字段名 不允许出现空格
  3. 字段名后面必须紧接着 “:”,不能有空格,而 “:” 后的字段值前可以有多个空格
  4. 字段的顺序是没有意义的,可以任意排列不影响语义
  5. 字段原则上不能重复,除非这个字段本身的语义允许

5 常用头字段

种类很多,基本分为 四大类:

  1. 通用字段:在请求头和响应头里都可以出现
  2. 请求字段:只能出现在请求头里,补充说明请求信息或额外条件
  3. 响应字段:仅能出现在响应头里,补充说明响应报文的信息
  4. 实体字段:实际上属于通用字段,但是专门描述 body 的额外信息。

对报文的解析实际上就是对头字段的处理。

基本的头信息

1. Host 字段(必须)

  1. 请求字段,只能出现在请求头。
  2. 唯一一个 HTTP/1.1 规范里要求必须出现的字段,如果没有就是一个错误报文。
  3. Host 字段告诉请求应该由哪个主机来处理,当一台计算机上托管了多个虚拟主机,服务端就需要用 Host 字段来选择。
  4. Host 字段可以区分IP相同但是域名不同的网站。

2. Uesr-Agent

  1. 请求字段,只能出现在请求头。
  2. 使用一个字符串来描述发起HTTP请求的客户端,服务器可以依据它来返回最合适此浏览器显示的页面。
  3. 实际上每个浏览器自称 “chrome”,“Mozilla” 等,是这个字段越来越长却毫无意义。

3. Date 字段

  1. 通用字段,通常出现在响应头里。
  2. 表示HTTP 报文的创建时间。
  3. 和其他字段搭配绝对缓存策略。

4. Server 字段

  1. 响应字段,只能出现在响应头里。
  2. 告诉客户端当前正在提供Web服务的软件名称和版本号。
  3. 非必须,容易暴露信息给外界被黑客攻击。
  4. 一般会给出一个无关紧要的描述信息。

基本的实体字段

1. Content-length

  1. 表示报文里body的字段长度,也就是请求头或响应头空行后数据的长度。
  2. 服务器看到这个字段就知道后续有多少数据,可以直接接受。
  3. 没有这个字段,表示 body 是不定长的,需要使用 chunked 方式分段传输。

7 HTTP 的报文的更多相关文章

  1. 重温Http协议--请求报文和响应报文

    http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...

  2. Tcp/ip 报文解析

    在编写网络程序时,常使用TCP协议.那么一个tcp包到底由哪些东西构成的呢?其实一个TCP包,首先需要通过IP协议承载,而IP报文,又需要通过以太网传送.下面我们来看看几种协议头的构成 一 .Ethe ...

  3. 前端学HTTP之报文首部

    前面的话 首部和方法配合工作,共同决定了客户端和服务器能做什么事情.在请求和响应报文中都可以用首部来提供信息,有些首部是某种报文专用的,有些首部则更通用一些.本文将详细介绍HTTP报文中的首部 结构 ...

  4. [httpserver]如何解析HTTP请求报文

    这个http server的实现源代码我放在了我的github上,有兴趣的话可以点击查看哦. 在上一篇文章中,讲述了如何编写一个最简单的server,但该程序只是接受到请求之后马上返回响应,实在不能更 ...

  5. dhcp协议交互报文

    DHCP共有八种报文,分别为DHCP Discover.DHCP Offer.DHCP Request.DHCP ACK.DHCP NAK.DHCP Release.DHCP Decline.DHCP ...

  6. 前端学HTTP之报文起始行

    前面的话 如果说HTTP是因特网的信使,那么HTTP报文就是它用来搬东西的包裹了.HTTP报文是在HTTP应用程序之间发送的简单的格式化数据块,每条报文都包含一条来自客户端的请求,或者一条来自服务器的 ...

  7. DNS报文格式(RFC1035)

    一.域名和资源记录的定义 1.Name space definitions 2.资源记录定义(RR definitions)      2.1 格式          后面分析报文的时候详细解释.   ...

  8. Jmeter+TCP\Scoket(8583)报文压力测试

    Jmeter一般被用来测试HTTP协议,我第一次拿来测试socket协议,pos机传输报文为8583,协议属于socket,也是TCP协议的一种,网上有LR怎么测试8583报文,我就研究了一下怎么用J ...

  9. Java Web ——http协议响应报文

    HTTP 响应报文 HTTP 响应报文由状态行.响应头部.空行 和 响应包体 4 个部分组成,如下图所示: 下面对响应报文格式进行简单的分析: 状态行:状态行由 HTTP 协议版本字段.状态码和状态码 ...

  10. ARP报文发送的可视化实现

    一.安装VS2013,下载wpdpack,为VS2010配置WinpCap环境: ⑴首先在View中选择Property Manager,然后展开工程,再展开Debug|Win32 ,接着右击 Mir ...

随机推荐

  1. Jquery ajax方式提交表单

    Jquery ajax方式提交表单,目前用过的有两种方式: 1.引人jquery.js和jquery.easyui.min.js后,用下面的方法: $('#checkForm1').form('sub ...

  2. 文心一言 VS 讯飞星火 VS chatgpt (96)-- 算法导论9.3 1题

    一.用go语言,在算法 SELECT 中,输人元素被分为每组 5 个元素.如果它们被分为每组 7个元素,该算法仍然会是线性时间吗?证明:如果分成每组 3 个元素,SELECT 的运行时间不是线性的. ...

  3. 5分钟入门 next13

    上半年vercel 推出了nextjs13 这个大版本,刚好最近有个c端的项目,所以就用了这个框架来写,技术体系基本也是文档提到的 tailwindcss + ts + swr + ssr ,总的来开 ...

  4. 解锁Java面试中的锁:深入了解不同类型的锁和它们的用途

    简介 多线程编程在现代软件开发中扮演着至关重要的角色.它使我们能够有效地利用多核处理器和提高应用程序的性能.然而,多线程编程也伴随着一系列挑战,其中最重要的之一就是处理共享资源的线程安全性.在这个领域 ...

  5. 低代码平台如何借助Nginx实现网关服务

    摘要:本文由葡萄城技术团队于博客园原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 在典型的系统部署架构中,应用服务器是一种软件或硬件系统, ...

  6. MySQL系列之读写分离架构——Atlas介绍、安装配置、Atlas功能测试、生产用户要求、Atlas基本管理、自动分表、关于读写分离建议

    文章目录 1. Atlas介绍 2.安装配置 3. Atlas功能测试 4. 生产用户要求 5. Atlas基本管理 6. 自动分表 7. 关于读写分离建议 1. Atlas介绍 Atlas是由 Qi ...

  7. 云图说|初识API中心APIHub

    阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要:API中心是为AP ...

  8. 虹科案例 | 丝芙兰xDomo:全球美妆巨头商业智能新玩法

    全球美妆行业的佼佼者丝芙兰,其走向成功绝非仅依靠品牌知名度和营销手段.身为数据驱动型企业,2018年以来,丝芙兰就率先在行业内采用虹科提供的Domo商业智能进行数据分析和决策,并首先享受了运营优化.效 ...

  9. 关于通过StringTemplate模板生成xml转成excel后office无法打开的问题解决

    说明:本人最近在着手实现导出日志数据,由于日志数据过多,在网上查找java 导出大量数据到excel的例子. 后发现园子里某位老哥通过StringTemplate模板生成excel格式的xml,这个思 ...

  10. 钉钉OA自定义审批流的创建和使用

    前言 大家好!我是sum墨,一个一线的底层码农,平时喜欢研究和思考一些技术相关的问题并整理成文,限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教. 钉钉作为一款办公软件,审批功能是它的核心功能 ...