网络之HTTP发展历程

150 阅读3分钟

http发展各阶段特点

- HTTP/0.9
  • 仅用于传输HTML超文本,用于学术交流,数据以ASSIC字节流返回
  • 只有一个请求行,并没有请求头和请求体
  • 服务器也没有返回头信息
- HTTP/1.0
  • 需要支持传输js,css,图片,视频等多类型文件,文件格式不仅仅局限于 ASCII 编码,还有很多其他类型编码
  • 引入了请求头和响应头,它们都是以为 Key-Value 形式保存的,可以支持更加深入的交流
  • 为了满足多类型文件,浏览器端需要解决(确定)以下几个问题:不同类型的文件到底是哪种,浏览器需要针对不同文件不同处理?文件过大,服务器压缩后浏览器需要知道解压算法?支持全球传播支持多语言?不同文件不同的编码类型?这些通过请求头参数传给服务器,服务器根据请求头要求准备返回数据,即按要求返回,部分服务器不支持的部分,服务器会通过响应头告诉浏览器我不支持那个我使用了另一种方式,浏览器最终依据响应头来处理多类型文件数据。
  • 此外,引入了状态码(响应行),cache机制,用户代理(请求头)等字段
  • 每进行一次 HTTP 通信,都需要经历建立 TCP 连接、传输 HTTP 数据(请求发送,请求响应)和断开 TCP 连接三个阶段,适用于单页面各类型文件不多且引用不多的情况
  • 一个域名对于一个主机,一个主机对应一个ip
- HTTP/1.1
  • 为了适应单页面多资源多引用的情况,避免反复建立Tcp连接增加了持久连接的方法,建立一次tcp连接可以进行多次http请求,只要浏览器或者服务器没有明确断开连接,那么该 TCP 连接会一直连接。目前浏览器中对于同一个域名,默认允许同时建立 6 个 TCP连接。1HTTP/1.1默认为持久连接,关闭持久连接,可在请求头加
Connection:close;
  • 持续连接可能导致一个tcp连接中的http请求阻塞,通过“管线化”处理阻塞问题,HTTP/1.1 中的管线化是指将多个 HTTP 请求整批提交给服务器的技术,但服务器依然要按顺序进行响应。但这项技术没能得到很好实现。
  • 提供虚拟主机的支持,一个公用ip可对应多个虚拟主机,一个虚拟主机对应一个域名。请求头中增加了Host 字段,用来表示当前的域名地址,这样服务器就可以根据不同的 Host 值做不同的处理。
  • 抛开响应头中contnet-length的无法动态估算局限,使用块传输机制对动态生成的内容提供了完美支持。
  • 提供了客户端cookie和安全机制
- HTTP/2
  • 建立在https基础之上
  • 主要采用多路复用技术解决一个域名只使用一个 TCP 长连接和消除队头阻塞问题实现资源的并行传输。
  • 提供了请求优先级,可以在发送请求时,标上该请求的优先级,高优先级优先处理。
  • 服务器推送
  • 头部压缩
- HTTP/3
  • 使用quic协议模拟结合tcp和udp的优点