【前端基础】http1.0 / http2.0 / http / https 的区别

2,084 阅读5分钟

首先说到 http 版本的区别,这里其实有 3 个 http 需要我们了解,分别是 http1.0 / http1.1 / http2.0

http1.0 和 http1.1 和 http2.0 的区别

http1.X版本的缺陷概括来说是:线程阻塞,在同一时间,同一域名的请求有一定的数量限制,超过限制数目的请求会被则塞。

http1.0

缺点:浏览器和服务器只保持短暂的连接,浏览器的每次请求都需要对服务器建立一个 TCP 连接(TCP 连接的成本很高没因为每次新建都需要对服务器三次握手),服务器请求完成后立刻断开 TCP 连接,服务器也不会记录过往的每次请求。

解决方式:在请求的头信息中添加 Connection 字段并设定值为 keep-alive

http1.1

而 http1.1 相对于 http1.0 提升了下面这些点:

  • 引入持久连接 : 即 TCP 默认不关闭,可以被多个请求复用,不用声明 keep-alive (对于同一个域名,大多数浏览器允许同时建立 6 个连接)
  • 管道机制 : 同一个 TCP 连接中,客户端可以同时发送多个请求
  • 分块传输编码 : 服务器每产生一块数据,就发送一块,用 流模式 取代 缓存模式
  • 新增请求方式
       PUT:请求服务器存储一个资源
       DELETE:请求服务器删除标识的资源
       OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求
       CONNECT:保留请求以供将来使用
       TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断

但是虽然相对于 http1.0 改进了很多地方, http1.1 还是有些许缺点:

  • 队头拥塞 :虽然允许了 TCP 的多路复用,但是在同一个 TCP 连接中,所有的请求都还是按照次序执行的,服务器只有在一个请求处理完了之后才会接着处理下一个,这导致的问题是如果排在前面的请求很慢,那么后面的请求就会一直处于等待状态,这就是 队头拥塞
    那么如何来解决这个问题呢?我们可以通过 减少请求数 ,和 同时多开持久连接 来解决。

http2.0

首先我们来了解一下 http2.0 的特点~~

  1. 采用二进制格式而非文本格式

    http1.1 的头信息是 ASCII 编码(文本),而数据体可以使二进制也可以是文本,但是 http2.0 无论是头信息还是数据体都是二进制,统称为帧,这是因为二进制解析起来更加的高效,并且紧凑,出错率也更少。

  2. 完全的多路复用,而非 有序拥塞 的,只需要一个连接即可实现并行

    http2.0 复用 TCP 连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,避免了 队头拥塞

  3. 报头压缩,减低开销

    http 协议是没有状态,导致每次请求都必须附上所有信息。所以,请求的很多头字段都是重复的,比如 Cookie ,一样的内容每次请求都必须附带,这会浪费很多带宽,也影响速度,所以 http2.0 对于相同的头部,不必再通过请求发送,只需发送一次。
    并且引入了头信息压缩机制,使用 gzip 或 compress 压缩后再发送
    另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,产生一个索引号,之后就不发送同样字段了,只需发送索引号。

  4. 服务器端推送

    http2.0 允许服务器在未经客户端请求的情况下,向客户端发送资源
    通过推送服务器任务,客户端可以把需要的内容存储在客户端中,避免了往返的延迟。

http 和 https 的区别

首先我们知道,http 协议是承载于 TCP 协议之上的,而在 http 和 TCP 之间增加一个安全协议层 (SSL 或者 TSL)就形成了我们所说的 https。

https 的主要作用

  1. 对数据进行加密,并建立一个安全通道,以此来保证传输过程中数据的安全。
  2. 对网站服务器进行真实的身份认证。

https 和 http 的区别

  1. https 是加密传输协议,http 是明文传输协议
  2. https 需要用到 ssl 证书,http 不用
  3. https 比 http 更加的安全,对搜索引擎更加友好,利于 seo
  4. https 标准端口 443,http 标准端口 80
  5. https 基于传输层,http 基于应用层

https 和 http 在工作流程上的区别

http 的工作流程:

  1. 建立一个 TCP 连接
  2. 浏览器发送 http 请求信息到服务端
  3. 服务器发送 http 回应信息到浏览器
  4. tcp 连接关闭

由于 https 在 http 的基础上新增了 ssl 证书的验证,所以在进行 http 请求之前,会进行如下的验证:

  1. 验证服务器端
  2. 客户端和服务器端选择加密算法和密码,确保双方都支持
  3. 验证客户端(可选)
  4. 使用公钥加密技术来生成共享加密数据
  5. 创建一个加密的 SSL 连接
  6. 基于该 SSL 连接传递 HTTP 请求