两道计算机网络面试题 4.15
HTTP1.0、HTTP1.1和HTTP2的区别
HTTP1.0 vs HTTP1.1
- 连接方式 : HTTP1.0默认为短链接,而HTTP1.1默认为长连接
- 状态响应码:HTTP1.1新加入了大量的状态码,比如409请求与当前资源的规定冲突,410资源已永久删除
- 连续发送请求:HTTP1.1在长连接的基础上,允许连续发送多个请求而不需等待响应,但存在队头阻塞问题
- 队头阻塞:如果第一个请求的响应较慢(如服务器处理时间长或网络延迟高),后续请求即使已经准备好,也必须等待第一个请求完成
- 头部压缩:HTTP1.0对Body压缩无标准支持,而HTTP1.1有标准的Body压缩机制,在请求头的Content-Encoding中
- 缓存机制:在HTTP1.0中,主要使用Header里的 If-Modified-Since 和 Expires来判断缓存的数据是否被修改的标准,而HTTP1.1则引入了更多缓存控制策略,如Entity tag、If-Match等
- 请求部分数据:在HTTP1.0中,存在一些浪费带宽的现象,比如客户端只需要某个对象的一部分,但是服务器却把整个对象送过来了,并且不支持断点续传功能;而HTTP1.1则在请求头中引入了range,从而允许只请求资源的某个部分,状态码为206部分内容,从而减少了对带宽的浪费。
- Host 头处理:HTTP1.1引入了Host头字段,允许在同一IP地址上托管多个域名,从而支持虚拟主机功能
HTTP1.1 vs HTTP2.0
- 多路复用:HTTP2可以在同一连接上同时传输多个请求和响应,且多个请求之间互不干扰,解决了HTTP1.1中的队头阻塞问题
- 实际上,HTTP2也存在队头阻塞问题:HTTP2依然使用TCP实现的,而TCP 要求数据按顺序到达。如果某个 TCP 数据包丢失,后续所有数据(即使属于不同 HTTP 流)必须等待重传。
- 二进制帧:HTTP1.1使用文本格式的报文进行传输,而HTTP2使用二进制帧进行数据传输,二进制帧更加紧凑高效,减少了传输的数据量和带宽消耗
- 头部压缩:HTTP1.1支持对Body压缩,而不支持对Header进行压缩;HTTP2不仅支持对Body压缩,还支持用HPACK算法对Header进行压缩
- 服务器推送:HTTP2支持服务器推送,可以在客户端请求一个资源时,将其他相关资源一并推送给客户端,从而减少了请求次数和延迟;而HTTP1.1需要客户端自己发送请求或许相关资源
TCP粘包和拆包问题
- 粘包:多个数据包被合并成一个 TCP 段发送,接收方无法正确区分原始数据包的边界
- 拆包:一个数据包被拆分成多个 TCP 段发送,接收方需要拼接才能还原完整数据。
产生原因
- TCP协议是面向字节流的,是不维护数据边界的,只保证数据可以有序到达
- 因为滑动窗口的存在,TCP协议可能会拆分或合并数据
- 为了减少网络开销,TCP协议默认会缓存小数据包合并发送
- 如果数据包超过 MTU(如以太网默认 1500 字节),TCP 会自动拆包
解决方案
- 固定包长度:给每个数据包固定长度,不足长度的部分补空,有点是操作简单,缺点是对于变长数据会浪费带宽
- 特殊字符分割:用特殊字符标记数据包边界,优点是操作简单,缺点是如果数据本身包含分隔符,则需转义处理
- 字段长度法:在数据包头部添加长度字段,明确指定数据长度,优点是高效、可处理任意长度数据包,缺点是需要额外解析长度字段才能确定字段长度
两道计算机网络面试题 4.15
https://jlqusername.github.io/2025/04/15/两道计算机网络面试题 4.15/