详解http报文

摘要

作为一个web开发者,每天都在使用者Http协议,却总是一知半解。本文参看Http RFC7230规范,梳理了http报文部分。

http 报文构成

start-line: 起始行,描述请求或响应的基本信息
*( header-field CRLF ): 头
CRLF
[ message-body ]: 消息body,实际传输的数据

header

起始行

起始行的格式就是
start-line = request-line(请求起始行)/(响应起始行)status-line

在这里插入图片描述

header头在这里插入图片描述

这些格式就是规则,用来解析的

顺序
理论上头字段的key顺序是无所谓的,但是最佳实践是将控制字段放在前面,比如请求的时候Host,响应的Date,这样可以尽快发现是否需要处理。

重复
除了Set-Cookie这个key,其他都不行,如果发送方发了重复的key,接收方会将它合并,值是以逗号分隔。

字段限制
协议本身对每个头字段没有限制,但是在工程实践中的得出过一些实践,没有通用的限制,和字段具体的语义有关。整体的header大小限制没有定义标准值,有些4K,有些8K。server端检查到header头超过了限制值,处于安全考虑,不会忽略掉。而是会抛出4XX错误。

只有Host字段是请求头中必须带的,其他无所谓。

字段请求头响应头解释
Host10告诉服务器应该由哪个主机处理
User-Agent10标识浏览器类型,虽然已经被用烂了,不太可信,但有时候可以用来自定义类型
Accept10可以接收的body类型 mime type,比如text/html
Accept-Charset10可以接收的字符集
Accept-Encoding10可以接收的编码格式
Accept-Language10可以接收的多语言
Content-Type11发送的body类型mime type
Content-Encoding11发送的编码
Content-Language11发送的语言

这边有完整的分类
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers

body

header是必须有要有的,但是body就不一定要用。

body就是传输的内容。因为Http是应用层协议,所以除了传输数据,还需要定义传输的数据格式。这些格式定义在header中指定。Content-Length请求或者响应的body长度,必须要带上这个字段,以便对方可以方便的分辨出报文的边界,也就是Body数据何时结束。如果Body太大,需要边计算边传输,不到最后计算结束是无法知道整个Body大小的,这个时候可以使用chunk传输,通过Transfer-Encoding指定,这两个header key是互斥的,只能指定一个,如果指定了两个,接收端优先处理Transfer-Encoding字段。通常body的数据比较多时,都使用chunk来传输,效率比较高。没有了length,怎么知道数据传输结束了,通过一个长度为 0的chunk,对应的分块数据没有内容,来表示body内容结束。
在这里插入图片描述

jetty 干了什么

jetty 是web容器,需要解析Http Request,发送Http Response。具体干了什么下回分析

关注公众号【方丈的寺院】,第一时间收到文章的更新,与方丈一起开始技术修行之路
在这里插入图片描述

参考

https://tools.ietf.org/pdf/rfc7230.pdf
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers

  • 30
    点赞
  • 153
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
tcpdump是一种网络抓包工具,用于分析和监测网络中的报文传输情况。它可以在Unix和类Unix系统上运行,并且具有强大的抓包能力和丰富的过滤选项。 使用tcpdump可以捕获和显示经过网络接口的数据包内容。它可以用于调试网络问题、查看网络流量、分析网络协议的交互过程等。通过tcpdump,我们可以了解到报文的各种信息,如源IP地址、目标IP地址、源端口号、目标端口号、传输协议、报文长度等,这些信息对于网络分析非常重要。 为了使用tcpdump,我们需要在命令行中输入相应的命令和过滤选项。比如,我们可以使用"tcpdump -i eth0"来捕获接口eth0上的报文。此外,tcpdump还提供了许多过滤选项,例如可以过滤某个IP地址、某个端口号、某种协议等等,以便我们只关注特定的报文。 分析tcpdump的报文时,我们可以根据具体需要关注以下几个方面: 首先,我们可以观察报文的源和目标IP地址以及端口号,以了解报文的双方通信情况。这可以帮助我们识别网络中的流量模式和通信的目的。 其次,我们可以观察报文的传输协议,如TCP、UDP、ICMP等,以了解不同协议的特点和使用情况。 另外,我们还可以查看报文的内容,以了解报文中传输的信息。例如,我们可以查看HTTP报文的头部信息、FTP报文的命令、DNS报文的查询等等。 在分析tcpdump报文时,我们需要注意保护隐私和安全。因为报文中可能包含敏感信息,如用户名、密码等。所以,在分析报文时,我们应该尽量避免记录这些私人信息,并且需要采取相应的安全措施。 总之,通过tcpdump报文分析,我们可以深入了解网络中的通信情况和报文交互过程,从而帮助我们识别和解决网络问题,提高网络的安全性和性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

方丈的寺院

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值