HTTP 协议

HTTP(Hyper Text Transfer Protocol,超文本传输协议)是互联网上应用最广泛的应用层协议,基于 TCP 协议,主要用于浏览器/服务器(B/S)架构通信。它是整个 Web 世界的通信基石。

发展历程

版本年份关键特性连接方式
HTTP/0.91991仅 GET,纯文本短连接
HTTP/1.01996POST/DELETE/PUT,超文本,头部,Cookie短连接(可 keep-alive)
HTTP/1.11997默认长连接,管道化,Host 头长连接(默认)

连接演进

短连接(HTTP/0.9 默认)

TCP 三次握手 → HTTP 请求/响应 → 服务端主动断开
TCP 三次握手 → HTTP 请求/响应 → 服务端主动断开

问题:每个请求都要三次握手,高并发下消耗巨大。

长连接(HTTP/1.0 Keep-Alive / HTTP/1.1 默认)

TCP 三次握手 → 请求1+响应1 → 请求2+响应2 → ... → 空闲超时断开

一个 TCP 连接处理多个请求,大幅减少握手开销。

无状态问题与解决方案

HTTP 协议本质是无状态的——每次请求都是独立的,服务器无法识别请求来自谁。

步骤说明
首次访问服务端 Set-Cookie: k=v → 浏览器存入本地
后续请求浏览器自动携带 Cookie: k=v
缺点客户端可篡改,不安全
步骤说明
首次认证服务端创建 Session,返回 Session ID(写入 Cookie)
后续请求携带 Session ID,服务端查 Session
优点敏感数据在服务端,安全
缺点集群需 Session 共享(存入 Redis)

JWT(JSON Web Token)

结构说明
Header算法类型(HS256/RSA)
Payload用户身份等声明数据
Signature签名防篡改
  • 客户端存储 Token,服务端无状态,天然集群友好
  • 签名机制保证数据不可篡改
方案存储位置安全性集群友好
Cookie 独立客户端❌ 可篡改
Cookie+Session服务端❌ 集群需共享存储(Redis)
JWT客户端✅ 签名

报文结构

请求报文

请求行:GET /index.html HTTP/1.1
请求头:Host: example.com
       User-Agent: Chrome/...
       Cookie: session_id=abc123
空行
请求体(POST 时包含数据)

响应报文

状态行:HTTP/1.1 200 OK
响应头:Content-Type: text/html
       Set-Cookie: k=v
空行
响应体(HTML/JSON/二进制等)

状态码分类

分类范围含义常见举例
1xx100-199信息100 Continue
2xx200-299成功200 OK, 201 Created
3xx300-399重定向301 Moved, 302 Found
4xx400-499客户端错误400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found
5xx500-599服务端错误500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable

HTTPS / TLS

HTTPS = HTTP + TLS(传输层安全协议)

TLS 握手简流程

Client Hello → Server Hello + 证书 → 密钥交换 → 加密通信

证书类型

类型验证级别适用
DV域名所有权个人/博客
OV企业认证企业官网
EV最高级金融/银行

HTTP/2 多路复用

  • 一个 TCP 连接上并发送多个请求/响应
  • 解决 HTTP/1.x 的队头阻塞问题

浏览器访问完整流程

1. DNS 解析(域名 → IP)
2. TCP 三次握手(建立连接)
3. TLS 协商(HTTPS 时)
4. HTTP 请求/响应(数据传输)
5. 浏览器渲染(解析 HTML/CSS/JS)
6. TCP 四次挥手(关闭连接)

上下游通信原则

上下游之间,通信协议能对上就可以。上游用什么协议封装,下游就用什么协议解封。

相关页面