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。
cookie 与 session
HTTP 本身无状态,服务端通过 cookie/session 识别用户:
- 服务器在响应中通过
Set-Cookie头下发 cookie。 - 浏览器后续请求自动携带
Cookie头。 - 服务端可以把会话状态保存在服务端(session),客户端只持有 sessionId;或者将状态直接放在 cookie 中(需签名加密)。
安全实践:为敏感 cookie 设置 HttpOnly、Secure、SameSite 属性,降低 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 协议栈的主流方向。