HTTP与HTTPS总结

HTTP和HTTPS协议的区别与工作原理

问题

总结 HTTP 和 HTTPS 协议的特点、区别及工作原理。

解答

HTTP 协议

HTTP(HyperText Transfer Protocol)是超文本传输协议,基于 TCP/IP 协议,默认端口 80。

特点:

  • 无状态:每次请求独立,服务器不保留连接信息
  • 明文传输:数据未加密,可被窃听
  • 简单快速:请求方法简单,通信速度快

请求方法:

方法描述
GET获取资源
POST提交数据
PUT更新资源
DELETE删除资源
HEAD获取响应头
OPTIONS查询支持的方法

HTTPS 协议

HTTPS = HTTP + TLS/SSL,默认端口 443。

TLS 握手过程:

客户端                                     服务器
   |                                         |
   |  1. ClientHello (支持的加密套件、随机数)  |
   |  -------------------------------------> |
   |                                         |
   |  2. ServerHello (选定加密套件、随机数)    |
   |     + 服务器证书                         |
   |  <------------------------------------- |
   |                                         |
   |  3. 验证证书,生成预主密钥               |
   |     用服务器公钥加密发送                 |
   |  -------------------------------------> |
   |                                         |
   |  4. 双方用三个随机数生成会话密钥          |
   |     后续通信使用对称加密                 |
   |  <====================================> |

加密方式:

// 对称加密:加解密使用同一密钥,速度快
// 常用算法:AES、DES

// 非对称加密:公钥加密,私钥解密,速度慢
// 常用算法:RSA、ECC

// HTTPS 结合两者:
// 1. 非对称加密交换密钥
// 2. 对称加密传输数据

HTTP 与 HTTPS 对比

特性HTTPHTTPS
端口80443
安全性明文传输加密传输
证书不需要需要 CA 证书
速度稍慢(握手开销)
SEO权重低权重高

HTTP 版本演进

HTTP/1.0
  - 每次请求新建 TCP 连接
  
HTTP/1.1
  - 持久连接(Connection: keep-alive)
  - 管道化请求
  - 缓存控制增强
  
HTTP/2
  - 二进制分帧
  - 多路复用(一个连接并行多个请求)
  - 头部压缩(HPACK)
  - 服务器推送
  
HTTP/3
  - 基于 QUIC(UDP)
  - 更快的连接建立
  - 解决队头阻塞

常见状态码

// 2xx 成功
200 OK              // 请求成功
201 Created         // 资源创建成功
204 No Content      // 成功但无返回内容

// 3xx 重定向
301 Moved Permanently  // 永久重定向
302 Found              // 临时重定向
304 Not Modified       // 使用缓存

// 4xx 客户端错误
400 Bad Request     // 请求语法错误
401 Unauthorized    // 未认证
403 Forbidden       // 禁止访问
404 Not Found       // 资源不存在

// 5xx 服务器错误
500 Internal Server Error  // 服务器内部错误
502 Bad Gateway            // 网关错误
503 Service Unavailable    // 服务不可用

关键点

  • HTTPS 通过 TLS/SSL 在 HTTP 基础上增加加密层,防止数据被窃听和篡改
  • TLS 握手使用非对称加密交换密钥,后续通信使用对称加密保证效率
  • HTTP/2 引入多路复用解决 HTTP/1.1 的队头阻塞问题
  • HTTPS 需要 CA 证书验证服务器身份,防止中间人攻击
  • 现代网站应优先使用 HTTPS,浏览器对 HTTP 站点会标记为”不安全”