HTTP与HTTPS协议入门

本文翻译自我的英文博客,最新修订内容可随时参考: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个连接,空闲超时后自动断开。
  2. 管道化(Pipelining)

    • 客户端可在等待前一个响应时发送多个请求(串行队列),通过Content-Length标识请求体长度。
    • 服务器需按请求顺序响应,引入Transfer-Encoding: chunked分块传输,支持流式响应。
      管道化机制
  3. 多域名支持与方法扩展

    • Host头部区分同一IP上的不同域名(如虚拟主机)。
    • 新增PUT(上传资源)、DELETE(删除资源)、OPTIONS(查询支持的方法)等方法。

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

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

HTTP/2(2015年)

二进制协议与帧结构

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

核心特性

  1. 多路复用(Multiplexing)

    • 客户端可在同一TCP连接中同时发送多个请求,服务器可乱序响应,彻底解决队头阻塞。
  2. 头部压缩(HPACK算法)

    • 通过建立头部表(Header Table)缓存重复字段,后续请求只需发送索引值,减少头部传输开销。
  3. 服务器推送(Server Push)

    • 服务器可主动推送客户端可能需要的资源(如CSS、JS),提前缓存至客户端。
      服务器推送机制
  4. 服务器发送事件(SSE)

    • 支持服务器主动向客户端推送数据(如实时通知),基于单向长连接,无需客户端频繁请求。

缺陷

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

HTTP/3(2021年)

基于UDP的QUIC协议

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

优势

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

HTTPS:安全的HTTP

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

TLS握手过程(明文传输)

  1. 客户端请求(ClientHello)

    • 发送支持的协议版本(如TLS 1.3)、随机数(Client Random)、加密算法列表等。
  2. 服务器响应(ServerHello)

    • 确认协议版本、加密算法,返回服务器证书(含公钥)及随机数(Server Random)。
    • 若需要客户端认证(如银行系统),会要求提供客户端证书。
  3. 客户端验证与密钥生成

    • 验证服务器证书有效性(CA签名、域名匹配、有效期)。
    • 生成预主密钥(Pre-master Secret),用服务器公钥加密后发送。
    • 结合三个随机数(Client Random、Server Random、Pre-master Secret)生成会话密钥(Session Key),用于后续对称加密。
  4. 服务器解密与会话建立

    • 用私钥解密预主密钥,生成会话密钥。
    • 双方切换至加密通信,后续数据通过对称加密传输。
      TLS握手全流程

性能优化

  • 会话复用

    • 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协议入门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

timerring

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值