0%

HTTP 历史

五层 & 七层

五层:物理、链路、网络、传输、应用
七层:物理、链路、网络、传输、会话、表示、应用

CDN

URI & URL

  • Uniform Resource Identifier,统一资源标识符,可以唯一标记互联网资源
  • Uniform Resource Locator,统一资源定位符,也就是地址,它是 URI 的子集

只要能唯一标识资源的就是 URI,在 URI 的基础上给出其资源的访问方式的就是 URL

HTTP 特征

  • 支持客户端-服务器模式
  • 简单快速:客户端向服务端请求只需要传送请求方法和路径。因为协议简单,所以服务器规模小所以通信速度很快
  • 灵活可拓展:HTTP 允许传输任意类型的数据对象,由 Content-Type 标记类型
  • 无连接:每次连接只处理一个请求,服务器处理完请求,并收到客户端的应答后,就断开连接
  • 无状态:没有记忆能力

HTTP 报文

HTTP 协议由三大部分组成:

  • 起始行:描述请求或响应的基本信息
  • header
  • body:实际传输的数据,不一定是纯文本,也可以是视频、图片等

header 和 body 之间会有一个空行,header 不能为空,body 可以为空

起始行

起始行包括三个字段:请求方法、URL、HTTP 版本号

HTTP 版本

HTTP 0.9

特性:

  • 只有一个请求行,没有请求头和请求体
  • 请求方法只有 GET

缺点:

  • 响应只有 HTML 文档,文件格式只局限于 ASCII 编码

HTTP 1.0

特性:

  • 引入了请求头和请求体,增加了状态码,支持多种文档类型
  • 使用短连接,每次发送数据都要经过三次握手和四次挥手,效率低
  • header 中只使用 If-Modified-Since 和 Expires 作为缓存

缺点:

  • 只提供了基本的认证,用户名和密码都没有加密
  • 不支持断点续传
  • 每个 IP 只能有一个域名
  • 在同一个 TCP 连接里面,请求顺序是固定的。服务器只有处理完一个请求的响应后,才会进行下一个请求的处理,如果前面请求的响应特别慢的话,就会造成许多请求排队等待的情况,也就是所谓的队头阻塞
  • 需要在响应头设置 Content-Length,然后浏览器再根据设置的数据大小来接收数据,对于动态生成的数据无能为力

HTTP 1.1

特性:

  • 使用摘要算法(MD5,加密不可逆,较为安全,只能通过暴力匹配破解)进行身份验证
  • 引入了 cookie
  • 默认使用持久连接,对应请求头 keep-alive
  • 新增 E-tag、If-Match、If-None-Match 等缓存
  • 支持断点续传,对应请求头 Range
  • 因为虚拟机的发展,一个 IP 支持多个域名

缺点:

  • 同时开启多条 TCP 连接时,连接之间会互相竞争带宽
  • 队头阻塞
  • TCP 的慢启动
  • 请求头重复携带

HTTP 2.0

特性:

  • 彻底的二进制协议,头和体都是二进制(HTTP 1.1 的头必须是 ASCII 编码)
  • 多路复用。在一个连接中,客户端和服务器都可以同时发送多个请求或回应,而且不需要按照顺序发送
  • 数据流概念。HTTP 2 的数据包是不按顺序发送的,同一个连接中的数据包可能来源于不同的请求,所以需要对数据包做标记,指明属于哪个请求
  • 头部压缩,因为 HTTP 无状态,每次请求都必须带上所有的信息,所以很多的请求字段都是重复的,比如 User-Agent。一模一样的内容每次请求都要携带会浪费带宽,影响速度。通过 gzip 或者 compress 压缩头后再发送。另一方面,客户端和服务端都维护一张头信息表,部分字段会存储到表中,生成一个索引,以后相同的就只发送索引,不发生字段,这也叫 HPACK 算法。
  • 允许服务器主动推送。HTTP 2 允许服务器未经请求,主动向客户端推送一些必要资源。

缺点:

因为 HTTP/2 使用了多路复用,一般来说同一域名下只需要使用一个 TCP 连接。由于多个数据流使用同一个 TCP 连接,遵守同一个流量状态控制和拥塞控制。只要一个数据流遭遇到拥塞,剩下的数据流就没法发出去,这样就导致了后面的所有数据都会被阻塞。HTTP/2 出现的这个问题是由于其使用 TCP 协议的问题,与它本身的实现其实并没有多大关系。

HTTP 3 (QUIC)

特性:

  • Quick UDP Internet Connection
  • 基于 UDP 实现了类似 TCP 的流量控制、可靠传输机制
  • 继承了 TLS
  • 使用了 HTTP 2 的多路复用,再加上使用了 UDP,真正解决了对头阻塞问题
  • 快速握手,快速启动。因为基于 UDP

缺点:

  • 服务端和客户端对 HTTP 3 的支持还不完善
  • 可能会存在安全性问题

本文标题:HTTP 历史

文章作者:Flower-F

发布时间:2022年02月16日 - 21:24

最后更新:2022年02月21日 - 17:06

-------------本文结束,感谢您的阅读-------------

欢迎关注我的其它发布渠道