HTTP 是什么

简介

HTTP 是超文本传输协议。它是协议、也是传输、又是超文本。但它不是互联网、不是编程语言、不是 HTML、不是一个孤立的协议

它由蒂姆·伯纳斯-李发明,同时,他也是 WWW 的发明人,最初主要用于传递 HTML 封装过的数据

超文本传输协议,拆分出来就是,”超文本“、”传输“、”协议“

超文本:比文本更大,它不仅包括文本,还包括图片、音视频等

传输:它专门用来在两点间传输数据,不能用于广播、寻址或路由

协议:是计算机世界里的协议,它确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式

特点

  • HTTP 是灵活可扩展的,可以任意添加头字段实现任意功能;
  • HTTP 是可靠传输协议,基于 TCP/IP 协议“尽量”保证数据的送达;
  • HTTP 是应用层协议,比 FTP、SSH 等更通用功能更多,能够传输任意数据;
  • HTTP 使用了请求 - 应答模式,客户端主动发起请求,服务器被动回复请求;
  • HTTP 本质上是无状态的,每个请求都是互相独立、毫无关联的,协议不要求客户端或服务器记录请求相关的信息。

优缺点( HTTP/1.1)

  • HTTP 最大的优点是简单、灵活和易于扩展;

  • HTTP 拥有成熟的软硬件环境,应用的非常广泛,是互联网的基础设施;

  • HTTP 是无状态的,可以轻松实现集群化,扩展性能,但有时也需要用 Cookie 技术来实现“有状态”;

    • 因为 Cookie,又有了 XSS、CSRF 等 web 安全问题
  • HTTP 是明文传输,数据完全肉眼可见,能够方便地研究分析,但也容易被窃听;

  • HTTP 是不安全的,无法验证通信双方的身份,也不能判断报文是否被窜改;

    • 所以有了 HTTPS
    • HTTPS 相对 HTTP 有了安全性、机密性、完整性、身份认知、不可否认等特点
      • 安全性:由 TLS 协议保证
      • 机密性:对称加密与非对称加密
      • 完整性:...
  • HTTP 的性能不算差,但不完全适应现在的互联网,还有很大的提升空间

    • 性能一般,所以有各种优化手段,HTTP1.1 的优化手段就有并发连接、域名分片
    • 所以才有了 HTTP2,从协议层解决队头阻塞问题
    • 后来又有了 HTTP3,将 TCP 协议换成 UDP,解决 TCP 的队头阻塞

历史时段

  • 1991 年发布 HTTP 0.9
    • 只支持纯文本格式
    • 只支持 GET 请求
  • 1996 年发布 1.0 版
    • 增加了 HEAD、POST 等新方法
    • 没有长连接,每次发送请求,都要链接一个 TCP
  • 1997 年发布 1.1 版
    • 至今传输最广泛的版本
    • 加上 connection: keep-alive (长连接),复用一个 TCP 连接
    • 优点(特点)
      • 长连接(持久连接):响应头中设置 keep-alive,可以在一个 TCP 连接上发送多个 HTTP 请求
    • 存在的问题
      • 对带宽的利用率并不理想(三个主要原因)
        • TCP 的慢启动
        • 多条 TCP 连接竞争带宽
        • 队头阻塞(主因)
          • 工作流程是请求-响应,请求发出去等待响应,然后在发送下一次请求。队头请求处理太慢,就会阻塞后面的请求处理
          • 发起了请求,但是响应还没回应,引起了“塞车”
      • (队头阻塞)解决方法:
        • 并发连接(多建立几个 TCP 连接)
          • 同一个服务器,最多建立 6 个连接
        • 域名分片
          • 多几个域名
          • 例如:把图片资源、js、css 分别部署在 10 个服务器,可以同时下载 60 个文件
        • 多路复用
          • HTTP2 解决方案
      • 此时的前端优化方案(网络层面)
        • 减少请求数量(例如雪碧图)、内敛一些资源:css、base64 图片、合并小文件等
  • 2015 年发布 2.0 版
    • 基于 SPDY 协议
    • 解决 HTTP1.1 的队头阻塞问题,让同一个 TCP 连接上发送所有 HTTP 请求
    • 优点:
      • 多路复用:相同域名多个请求,共享同一个 TCP 连接
      • 二进制传输:之前是纯文本传输
      • 请求优先级:给每个 request 设置优先级
      • 数据流:每个请求和影响都当作一个流,
      • 服务器推送:可以主动向客户端发送消息
      • 头部压缩:减少包的大小和数量
    • 缺点:
      • TCP 以及 TCP+ TLS 建立连接的延时
      • 还是会存在队头阻塞,不过是 TCP 的队头阻塞
      • 多路复用导致服务器压力上升
      • 多路复用容易 Timeout
  • 2018 年发布 3.0 版
    • Google 发明了一个新的协议,叫做 QUIC,它基于 UDP 协议,取代 TCP 协议
    • 因为 TCP 会丢包,所以改用另外一个协议
    • 一旦 TCP 层出现丢包,依然会出现队头阻塞问题(Stream 丢失),使用 UDP 协议能从根本上解决了队头阻塞的问题
    • 特点:
      • 改进的拥塞控制、可靠传输
      • 快速握手
      • 继承了 TLS 1.3 加密
      • 多路复用
      • 连接迁移

参考资料

Last Updated:
Contributors: johan