HTTP1.x-HTTP2-HTTPS

... 2020-10-15 About 5 min

# HTTP1.x-HTTP2-HTTPS

# 1. http/1.x

  • 缺陷:线程阻塞,在同一时间,同一域名下面的请求有一定的数量限制,超过限制数目的请求会被阻塞

# (1). http1.0

  • 缺陷:浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP(TCP连接的新建成本很高,因为需要客户端和服务器三次握手),服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求

  • 解决方案:添加头部信息----非标准的Connection字段Connection:keep-alive

# (2). http1.1

  • 针对与http1.0的改进点
  1. 持久连接:引入了持久连接,即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection:keep-alive(对于同一个域名,大多数浏览器允许同事建立6个持久连接)

  2. 管道机制:即在同一个TCP连接里面,客户端可以同时发送多个请求

  3. 分块传输编码:即服务端每产生一块数据,就发送一块,采用“流模式”而取代“缓存模式”

  4. 新增请求方式

  • PUT:请求服务器存储一个资源;

  • DELETE:请求服务器删除标识的资源;

  • OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求;

  • TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断;

  • CONNECT:保留将来使用

  • 缺点: 虽然允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信式按次序进行的。服务端只有处理完一个请求,才会处理下一个请求,如果前面的处理特别慢,后面的就会又许多的请求排队等着,这就将导致“队阻塞”

  • 避免方式: 一是减少请求数,二是同时多开持久连接

# 2. http/2.0

  • 特点

    • 采用二进制格式而非文本格式

    • 完全多路复用,而非有序并阻塞的、只需一个链接即可实现运行

    • 使用报头压缩,减低开销

    • 服务器推送

  1. 二进制协议
    1. http/1.1版的头信息肯定是文本(ASCLL编码),数据体可以是文本,也可以是二进制。http/2则是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为“帧”:头信息帧和数据帧
    1. 二进制协议解析起来更高效、“线上”更紧凑,更重要的是错误更少
  1. 完全多路复用
    1. http/2复用TCP连接,在一个连接里,客户端和浏览器端都可以同时发送多个请求或者回应,而不用按照顺序一一对应,这样就避免了“队头阻塞”
  1. 报头压缩
    1. http协议是没有状态,导致每次请求都必须附上所有信息,所以去,请求的很多头字段都是重复的,比如cookie,一样的内容每次请求的时候都必须带上,这样会浪费很多带宽,也影响速度
    1. 对于相同的头部,不必再通过请求发送,只需要发送一次
    1. http/2对这一点做了优化,引入了头部信息压缩机制
    1. 一方面,头信息使用gzip或compress压缩后再发送
    1. 另一方面,客户端和服务器同时维护一张头信息表,所有头信息表,所有字段都会存入这个表,产生一个索引号,之后就不发送同样字段了,只需要发送索引号
  1. 服务器推送
    1. http/2允许服务器未经请求,主动向客户发送资源
    1. 通过推送那些服务器任务客户端将会需要的内容到客户端的缓存中,避免往返的延迟

# 3. https

http协议通常承载于TCP协议之上,在http和TCP之间添加一个安全协议层(SSL和TSL),这个时候,就成了我们说的https

  1. https主要作用
    1. 对数据进行加密,并建立一个信息安全通道,来保证传输过程中的数据安全
    1. 对网站服务器进行真实身份认证
  1. http和https的区别
    1. https是加密传输协议,http是名文传输协议
    1. https需要用到SSL证书,而http不用
    1. https比http更加安全对搜索引擎更友好,利于SEO
    1. https标准端口,http标准端口80
  • 5.http基于传输层,http基于应用层
  1. http和https的工作过程的区别
  • http包含的动作:

浏览器打开一个TCP连接

浏览器发送HTTP请求到服务器

服务器发送HTTP回应到浏览器

TCP关闭

  • SSL包含动作(https多http的一部分

验证服务端

客户端和服务端选择加密算法和密码,确保双方都支持

验证客户端(可选)

使用公钥加密技术来生成加密数据

创建一个加密的SSL连接

基于上面的SSL连接传递HTTP请求

  1. https的加密方式
  • 对称加密:加密和解密都是用的同一个密钥

  • 非对称加密:加密和解密使用的密钥是不同的,分别成为:公钥、私钥;公钥和算法都是分开的,私钥是保密的

    • 非堆成加密过程:服务端生成配对的公钥和私钥
    • 私钥保存在服务端,公钥发送到客户端
    • 客户端使用公钥加密明文传输到服务端
    • 服务端使用私钥解密密文得到名文
  • 数字签名:就是在信息的后面再加上一段内容,可以证明信息没有被修改过

Last update: December 23, 2022 13:14
Contributors: salvatoreliaoxuan , liaoxuan