HTTP 协议详解 — 发展史、连接管理、无状态解决方案
概述
Day37 是 Web 应用层的基础篇,深入讲解 HTTP 协议概念与发展历程(HTTP/0.9 → HTTP/1.0 → Keep-Alive)、短连接到长连接的演进、无状态问题的三种解决方案(Cookie/Session/JWT 对比)、URL 结构与组成、HTTP 请求/响应报文格式与状态码分类、浏览器完整访问流程。
核心内容
HTTP 协议发展史
| 版本 | 关键特性 | 连接方式 |
|---|---|---|
| HTTP/0.9 | 仅 GET,纯文本 | 短连接 |
| HTTP/1.0 | POST/DELETE/PUT,超文本,头信息 | 短连接(可 keep-alive) |
长连接演进
- 短连接问题:每个请求都要三次握手,高并发下消耗大
- Keep-Alive:
Connection: keep-alive请求保持连接,keepalive_timeout控制超时
无状态三种解决方案
| 方案 | 存储位置 | 安全性 | 集群友好 |
|---|---|---|---|
| Cookie 独立 | 客户端 | ❌ 可篡改 | ✅ |
| Cookie+Session | 服务端 | ✅ | ❌ 需共享(Redis) |
| JWT | 客户端(Token) | ✅ 签名 | ✅ 无状态 |
- Session 共享方案:将 Session 存入 Redis 等共享存储
- JWT:JSON Web Token,包含 Header + Payload + Signature,无状态认证
HTTP 报文结构
- 请求报文:请求行(方法+URL+版本)+ 请求头 + 空行 + 请求体
- 响应报文:状态行(版本+状态码+原因)+ 响应头 + 空行 + 响应体
- 状态码分类:1xx(信息)、2xx(成功)、3xx(重定向)、4xx(客户端错误)、5xx(服务端错误)
浏览器访问完整流程
DNS 解析 → TCP 三次握手 → TLS 协商(HTTPS)→ HTTP 请求/响应 → 浏览器渲染 → TCP 四次挥手