HTTP与HTTPS协议入门

237 阅读5分钟

本文翻译自我的英文博客,最新修订内容可随时参考:​​HTTP与HTTPS协议入门​

HTTP协议是互联网的基石,HTTPS则是其安全版本。HTTP基于TCP/IP协议,属于应用层协议,不涉及数据包传输细节,主要规定客户端与服务器的通信格式,默认端口为80。

HTTP/0.9(1991年)

  • 单一功能:仅支持​​GET​​方法,建立TCP连接后,客户端发送GET请求,服务器返回HTML资源后立即关闭连接。
  • 局限性:不支持其他方法(如POST)、无请求头/响应头,仅能传输纯文本HTML。

HTTP/1.0(1996年)

核心改进

  • 协议标准化:引入请求头和响应头,定义了通信格式。
  • 方法扩展:新增​​POST​​(提交数据)、​​HEAD​​(获取头部信息)等方法。
  • 状态码体系:引入1xx(信息性)、2xx(成功)、3xx(重定向)、4xx(客户端错误)、5xx(服务器错误)等状态码。
  • 头部字段:支持​​Content-Type​​(指定内容类型)、​​Content-Encoding​​(压缩格式)、​​Cache-Control​​(缓存控制)等字段。

缺陷

  • 非持久连接:每个TCP连接仅能处理一次请求,多次请求需反复建立连接,效率低下。

HTTP/1.1(1997年)

关键特性

  1. 持久连接(Persistent Connection)
  • 允许同一TCP连接处理多个请求,默认不关闭连接(可通过​​Connection: close​​主动关闭)。
  • 单域名最多建立6个连接,空闲超时后自动断开。
  1. 管道化(Pipelining)
  • 客户端可在等待前一个响应时发送多个请求(串行队列),通过​​Content-Length​​标识请求体长度。
  • 服务器需按请求顺序响应,引入​​Transfer-Encoding: chunked​​分块传输,支持流式响应。
  1. 多域名支持与方法扩展
  • ​Host​​头部区分同一IP上的不同域名(如虚拟主机)。
  • 新增​​PUT​​(上传资源)、​​DELETE​​(删除资源)、​​OPTIONS​​(查询支持的方法)等方法。

缺陷:队头阻塞(Head-of-Line Blocking)

  • 同一连接中,前一个请求未响应会阻塞后续请求,即使响应数据已就绪也无法提前处理。

HTTP/2(2015年)

二进制协议与帧结构

  • 采用二进制格式传输数据,将数据分割为帧(Frame) ,如请求帧、响应帧、重置帧等。
  • 每个帧包含流标识符(Stream ID) ,客户端流ID为奇数,服务器流ID为偶数,支持多路复用(同一连接并发处理多个请求)。

核心特性

  1. 多路复用(Multiplexing)
  • 客户端可在同一TCP连接中同时发送多个请求,服务器可乱序响应,彻底解决队头阻塞。
  1. 头部压缩(HPACK算法)
  • 通过建立头部表(Header Table)缓存重复字段,后续请求只需发送索引值,减少头部传输开销。
  1. 服务器推送(Server Push)
  • 服务器可主动推送客户端可能需要的资源(如CSS、JS),提前缓存至客户端。
  1. 服务器发送事件(SSE)
  • 支持服务器主动向客户端推送数据(如实时通知),基于单向长连接,无需客户端频繁请求。

缺陷

  • TCP层队头阻塞:若TCP数据包丢失,整个连接的所有流均需等待重传,影响并发性能。
  • 服务器推送局限性:无法直接推送动态消息,需结合SSE实现实时通信。

HTTP/3(2021年)

基于UDP的QUIC协议

  • 放弃TCP,改用UDP(用户数据报协议) ,通过**QUIC(快速UDP互联网连接)**实现可靠性:
  • 多路复用:每个流独立传输,单个流丢包不影响其他流。
  • 连接迁移:使用连接ID标识会话,IP或端口变更时无需重新握手。

优势

  • 减少TCP三次握手和TLS握手延迟,首次连接耗时更低。
  • 避免TCP层队头阻塞,提升弱网络(如移动网络)下的性能。

HTTPS:安全的HTTP

HTTPS通过SSL/TLS协议解决HTTP的三大风险(窃听、篡改、伪装),核心流程如下:

TLS握手过程(明文传输)

  1. 客户端请求(ClientHello)
  • 发送支持的协议版本(如TLS 1.3)、随机数(Client Random)、加密算法列表等。
  1. 服务器响应(ServerHello)
  • 确认协议版本、加密算法,返回服务器证书(含公钥)及随机数(Server Random)。
  • 若需要客户端认证(如银行系统),会要求提供客户端证书。
  1. 客户端验证与密钥生成
  • 验证服务器证书有效性(CA签名、域名匹配、有效期)。
  • 生成预主密钥(Pre-master Secret) ,用服务器公钥加密后发送。
  • 结合三个随机数(Client Random、Server Random、Pre-master Secret)生成会话密钥(Session Key) ,用于后续对称加密。
  1. 服务器解密与会话建立
  • 用私钥解密预主密钥,生成会话密钥。
  • 双方切换至加密通信,后续数据通过对称加密传输。

性能优化

  • 会话复用
  • Session ID:服务器内存中存储会话密钥,客户端重连时携带ID恢复会话(需单服务器部署)。
  • Session Ticket:服务器颁发加密票据,客户端重连时直接解密恢复密钥(支持分布式部署)。
  • 无密钥加密(Keyless SSL)
  • 服务器私钥仅用于解密预主密钥,其他流程由CDN等中间层处理,减少私钥暴露风险。

SSL与TLS的区别

  • SSL(安全套接层) :早期协议,因存在安全漏洞已被弃用(如SSL 3.0的POODLE攻击)。
  • TLS(传输层安全) :SSL的继任者,当前主流版本为TLS 1.3,提供更强的加密算法和安全性。
  • 术语混淆:习惯上仍称TLS证书为“SSL证书”,但实际应用中仅使用TLS协议。

总结:协议演进对比

版本传输层协议多路复用头部压缩连接特性典型应用场景
HTTP/0.9TCP不支持单请求短连接早期静态网页
HTTP/1.1TCP有限支持持久连接+管道化传统Web站点
HTTP/2TCP支持支持二进制帧+服务器推送现代Web应用(如SPA)
HTTP/3UDP+QUIC支持支持抗丢包+连接迁移移动网络、实时通信应用

如需深入调试HTTPS配置或优化网站性能,可参考博客中的完整示例:​​HTTP与HTTPS协议入门​​。