跳到主要内容

HTTP / HTTPS

HTTP(HyperText Transfer Protocol)是 Web 的应用层协议,定义了浏览器与服务器之间请求和响应的格式。HTTPS 在 HTTP 基础上加入 TLS,提供加密与身份认证。

HTTP/1.1 请求与响应报文

HTTP 是文本协议,报文分为请求报文与响应报文。

请求报文示例:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: curl/8.0
Accept: */*

响应报文示例:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 1234
Date: Wed, 11 Jun 2026 10:00:00 GMT

<!doctype html>...

首行(请求行或状态行)、首部(Header)与可选的 body 三部分构成完整报文。

常用方法

方法含义幂等是否带 body
GET获取资源
POST提交数据,可能创建或修改资源
PUT替换目标资源
DELETE删除资源可选
HEAD与 GET 类似但不返回 body
PATCH局部更新资源
OPTIONS探测服务器支持的方法

幂等性指多次执行同一请求结果一致,这是设计分布式系统时的重要约束。

状态码分类

HTTP 状态码首位表示分类:

  • 1xx:信息性,表示请求已接收,继续处理。
  • 2xx:成功,常见 200 OK、204 No Content、206 Partial 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。

HTTP 本身无状态,服务端通过 cookie/session 识别用户:

  • 服务器在响应中通过 Set-Cookie 头下发 cookie。
  • 浏览器后续请求自动携带 Cookie 头。
  • 服务端可以把会话状态保存在服务端(session),客户端只持有 sessionId;或者将状态直接放在 cookie 中(需签名加密)。

安全实践:为敏感 cookie 设置 HttpOnlySecureSameSite 属性,降低 XSS 与 CSRF 风险。

HTTPS = HTTP + TLS

HTTPS 是运行在 TLS 之上的 HTTP。TLS 1.2/1.3 提供:

  • 机密性:使用对称加密(AES、ChaCha20)加密数据。
  • 完整性:使用 MAC 或 AEAD(GCM)防篡改。
  • 身份认证:通过 X.509 证书链验证服务端身份。

TLS 1.3 握手只需 1-RTT(0-RTT 在重连时可用),废弃了不安全的老算法(RC4、SHA-1、静态 RSA 密钥交换)。

HTTP/2 多路复用

HTTP/2 是二进制分帧协议,主要改进:

  • 二进制分帧:将报文切分为带流 ID 的帧,不再依赖文本换行。
  • 多路复用:单连接并发多个请求/响应,解决 HTTP/1.1 的队头阻塞。
  • 首部压缩:HPACK 算法减少冗余首部。
  • 服务器推送:服务端可主动推送资源(实践中使用率有限)。

HTTP/3 over QUIC

HTTP/3 将传输层替换为 QUIC,完全基于 UDP。主要优势:

  • 彻底解决 TCP 队头阻塞(QUIC 内部独立流)。
  • 握手更短,默认 1-RTT。
  • 内置 TLS 1.3,默认加密。
  • 连接迁移(网络切换不中断)。

主流浏览器与 CDN 厂商已全面支持 HTTP/3,这是未来 Web 协议栈的主流方向。