HTTP-协议相关
文章目录

# HTTP 协议相关

HTTP

* 超文本传输协议

  • HTTP 是应用层协议, 单纯设计了传输的格式, 不关心请求内容的具体细节
  • 无状态, 导致 HTTP Header 内容过大
    * 所有的传输数据都是未加密的, 都是明文传输, 很显然是有问题的

总结就是俩缺点: 安全不足和性能不高

TCP

HTTP 只是设计了格式, 不关心信息传输的细节, TCP 负责传输.

TCP 包含以下特点:

  1. 无差错传输
  2. 按序传输 (可能造成阻塞)

TCP/IP 建立连接的过程

  1. URL 获取主机名
  2. DNS 获取 IP
  3. 浏览器根据 URL 确定 port
  4. 浏览器建立一条 TCP 连接
  5. 浏览器发送一条 HTTP 请求报文
  6. 服务器发回一条 HTTP 响应暴风
  7. 关闭连接

TCP 性能的缺陷

  1. DNS 解析需要时间
  2. 三次握手耗费时间(虽然非常短但是数量一多就很耗时)
  3. 为了保证每部分数据传输成功, 会进行延迟确认, 这部分也影响了性能

HTTPS

* HTTP + SSL

未来 TLS 会代替 SSL 实现加密协议

HTTP/2

特点:

* 二进制帧封装
* Server Push 也就是服务端推送.
* Header 压缩
* 传输多路复用, 不是可以减少请求的次数.

缺点:

  • TCP 协议限制了速度
  • 队头阻塞依然是个问题

HTTP/3

  • 替换 TCP 为 UDP
  • 引入 QUIC
    • 实现类似 TCP 的传输功能
    • 实现快速握手
    • 实现 TLS 加密
    • 多路复用完美解决 TCP 中队头阻塞问题

使用 UDP 替换了 TCP, 解决了队头阻塞并且对性能进一步提升

附录

UDP 和 TCP 区别

TL’DR: TCP 为了安全和稳定性降低了效率, UDP 为了效率牺牲了安全稳定性, 将安全性交给了 TLS, 将稳定性交给了上层的应用程序.

  • 当前主流是 TCP
  • TCP 连接需要三次握手, 关闭连接需要四次握手.
  • TCP 连接可靠
  • UDP 不保证信息交付, 不保证传递成功, 也不保证传递顺序, 也不跟踪连接状态.
    • 因此 UDP 传输 效率更高, 不会受到阻塞. 另外也有缺点, 就是所有的内容控制都需要由应用程序控制.