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 ...
随机推荐
- MIT 6.828 Lab实验记录 —— lab1 Booting PC
实验参考信息 MIT 6.828 lab1 讲义地址 MIT 6.828 课程 Schedule MIT 6.828 lab 环境搭建参考 MIT 6.828 lab 工具guide Brennan' ...
- 谁家面试往死里问 Swagger 啊?
大家好,我是小富- 前言 说个挺奇葩的事,有个老铁给我发私信吐槽了一下它的面试经历,他去了个国企单位面试,然后面试官跟他就Swagger的问题聊了半个多小时.额- 面试嘛这些都不稀奇,总能遇到是千奇百 ...
- Vmware中的centos7突然连接不上网络了,网络适配器采用的是NAT模式,解决办法?
进入Windows操作系统,然后右键点击我们的电脑,进入到管理界面 计算机-> 管理->服务和应用程序->服务,找到如下服务进程 VMware DHCP Service, VMwar ...
- 安卓APK签名注入大师(APP注入弹窗,注入打开密码,注入过期时间, 注入提示信息,一机一码)
安卓APK签名注入大师可以给安卓APK文件一键注入APP注入弹窗,注入打开密码,注入过期时间, 注入提示信息,一机一码等功能,方便开发人员给自己的APK文件添加消息提示, 密码等功能. 可以保护文件安 ...
- centos7离线安装docker和docker-compose
1.找一台可联网的centos7主机 在这台可以联网的机器上把离线包都下载好. 2.下载docker rpm安装包和相关依赖 ## 安装yum-utils包,添加docker yum源 sudo yu ...
- HashMap底层源码分析
HashMap底层原理实现 1.HashMap初始化 jdk1.8版本之后:数组+链表+红黑树实现,先去观看HashMap的构造方法: 构造方法: public HashMap() { this.lo ...
- NineData SQL 窗口支持深色模式,让程序员不再怕长期用眼!
您有没有尝试过被明亮的显示器闪瞎眼的经历? 在夜间或低光环境下,明亮的界面会导致许多用眼健康问题,例如长时间使用导致的眼睛疲劳.干涩和不适感,同时夜间还可能会抑制褪黑素分泌,给您的睡眠质量带来影响. ...
- 如何创建可引导的 macOS Sonoma 安装介质
2023 年 9 月 26 日(北京时间 27 日凌晨)macOS Sonoma 正式版现已发布. 如何创建可引导的 macOS Sonoma 安装介质 如何创建可引导的 macOS 安装器 | 如何 ...
- ORA-01008:并非所有变量都已绑定-解决办法
近期批量处理数据,后台用JAVA编写,连接Oracle数据库,程序运行报ORA-01008问题.解决这个问题时遇见的坑较多,下面复盘现象.问题提出解决办法,希望能帮到遇见同类问题的你. 调试问题: 后 ...
- Python基础知识——函数的基本使用、函数的参数、名称空间与作用域、函数对象与闭包、 装饰器、迭代器、生成器与yield、函数递归、面向过程与函数式(map、reduce、filter)
文章目录 1 函数的基本使用 一 引入 二 定义函数 三 调用函数与函数返回值 2 函数的参数 一 形参与实参介绍 二 形参与实参的具体使用 2.1 位置参数 2.2 关键字参数 2.3 默认参数 2 ...