HTTP(Hypertext Transfer Protocol)即超文本传输协议,是万维网(WWW)数据通信的基础协议,也是现代互联网应用最广泛的协议之一。
一、HTTP概述
1.1 基本概念
- 定义:应用层协议,基于客户端-服务器模型
- 作用:规范客户端与服务器之间如何请求和传输资源
- 特点:
- 无状态协议:每个请求独立,服务器不保留客户端状态
- 可扩展:通过头部字段支持新功能
- 基于文本(HTTP/1.x),HTTP/2后改为二进制格式
1.2 工作流程
sequenceDiagram
participant Client
participant Server
Client->>Server: 1. 建立TCP连接
Client->>Server: 2. 发送HTTP请求
Server->>Client: 3. 处理请求并返回响应
Client->>Server: 4. 关闭连接(非持久连接)
二、HTTP消息结构
2.1 请求报文
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
[请求体]
- 请求行:方法 + URI + HTTP版本
- 请求头:键值对元数据
- 空行:分隔头部和主体
- 请求体:可选(如POST提交的数据)
2.2 响应报文
HTTP/1.1 200 OK
Date: Mon, 23 May 2025 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 138
<html>...</html>
- 状态行:HTTP版本 + 状态码 + 状态文本
- 响应头:元数据信息
- 空行:分隔头部和主体
- 响应体:请求的资源内容
三、HTTP核心组件
3.1 请求方法
方法 | 描述 | 幂等性 |
---|
GET | 获取资源 | 是 |
POST | 提交数据/创建资源 | 否 |
PUT | 替换整个资源 | 是 |
DELETE | 删除资源 | 是 |
PATCH | 部分更新资源 | 否 |
HEAD | 获取头部信息 | 是 |
OPTIONS | 查询服务器支持的方法 | 是 |
3.2 状态码类别
状态码范围 | 类别 | 示例 |
---|
1xx | 信息响应 | 100 Continue |
2xx | 成功 | 200 OK, 201 Created |
3xx | 重定向 | 301 Moved Permanently |
4xx | 客户端错误 | 400 Bad Request, 404 Not Found |
5xx | 服务器错误 | 500 Internal Server Error |
3.3 常见头部字段
通用头部
Cache-Control
: 缓存控制
Connection
: 连接管理
Date
: 消息日期
请求头部
Host
: 请求的主机名
User-Agent
: 客户端信息
Accept
: 可接受的媒体类型
Authorization
: 认证信息
响应头部
Server
: 服务器信息
Location
: 重定向目标
Content-Type
: 响应体类型
Set-Cookie
: 设置Cookie
四、HTTP连接管理
4.1 连接类型
类型 | 描述 | 特点 |
---|
非持久连接 | HTTP/1.0默认 | 每个请求/响应后关闭连接 |
持久连接 | HTTP/1.1默认(Keep-Alive) | 复用TCP连接 |
管道化 | HTTP/1.1特性 | 连续发送多个请求 |
4.2 连接优化
- 并行连接:同时建立多个TCP连接
- 域名分片:将资源分布在不同域名下
- CDN加速:就近获取资源
五、HTTP版本演进
5.1 版本对比
特性 | HTTP/1.0 | HTTP/1.1 | HTTP/2 | HTTP/3 |
---|
连接复用 | ✗ | ✓ | ✓ | ✓ |
头部压缩 | ✗ | ✗ | ✓ | ✓ |
二进制传输 | ✗ | ✗ | ✓ | ✓ |
服务器推送 | ✗ | ✗ | ✓ | ✓ |
多路复用 | ✗ | ✗ | ✓ | ✓ |
传输层协议 | TCP | TCP | TCP | QUIC/UDP |
队头阻塞解决 | ✗ | ✗ | 部分解决 | ✓ |
5.2 HTTP/2核心特性
- 二进制分帧层:将消息分解为独立帧
- 流多路复用:一个连接上并行多个流
- 头部压缩:HPACK算法减少头部大小
- 服务器推送:主动推送相关资源
5.3 HTTP/3创新
- 基于QUIC协议:在UDP上实现可靠传输
- 0-RTT连接建立:减少握手延迟
- 改进的拥塞控制
- 连接迁移:网络切换时保持连接
六、HTTPS安全机制
graph LR
A[HTTP] --> B[SSL/TLS加密]
B --> C[TCP]
6.1 核心组件
- 加密算法:
- 证书体系:
- 握手过程:
- 客户端Hello
- 服务器发送证书
- 密钥交换
- 加密通信建立
6.2 优势
- 数据机密性(防窃听)
- 数据完整性(防篡改)
- 身份认证(防冒充)
七、缓存机制
7.1 缓存控制头
头部字段 | 作用 |
---|
Cache-Control | 控制缓存行为(max-age, no-cache) |
Expires | 资源过期时间 |
ETag | 资源标识符(验证缓存有效性) |
Last-Modified | 资源最后修改时间 |
7.2 缓存验证流程
sequenceDiagram
Client->>Cache: 1. 请求资源
alt 缓存有效
Cache-->>Client: 2. 返回缓存内容
else 需要验证
Cache->>Server: 3. 发送验证请求(If-None-Match)
alt 未修改
Server-->>Cache: 304 Not Modified
Cache-->>Client: 4. 返回缓存
else 已修改
Server-->>Cache: 200 + 新内容
Cache-->>Client: 5. 返回新内容
end
end
八、Cookie与会话管理
8.1 Cookie工作原理
- 服务器通过
Set-Cookie
头部设置Cookie
- 客户端后续请求自动携带Cookie
- 服务器通过Cookie识别用户状态
8.2 Cookie属性
Domain
:生效域名
Path
:生效路径
Expires/Max-Age
:有效期
HttpOnly
:禁止JavaScript访问
Secure
:仅通过HTTPS传输
SameSite
:限制跨站发送
九、RESTful API设计
9.1 核心原则
- 资源导向:URI表示资源(
/users/123
)
- 统一接口:使用标准HTTP方法
- 无状态:每个请求包含完整上下文
- 可缓存:明确标识可缓存资源
- 分层系统:客户端无需了解中间层
9.2 最佳实践
- 使用名词复数形式(
/products
)
- 版本控制(
/api/v1/products
)
- 过滤排序参数(
?sort=name&limit=10
)
- 使用标准状态码
- 返回JSON格式数据
十、性能优化实践
- 减少请求数:
- 减小资源大小:
- 压缩(Gzip/Brotli)
- 图片优化(WebP/AVIF)
- 利用缓存:
- 设置合理缓存策略
- 使用Service Workers
- HTTP/2优化:
- CDN加速:
十一、安全防护
- HTTPS强制:HSTS头部
- 内容安全策略:CSP头部
- 跨域控制:CORS策略
- 点击劫持防护:X-Frame-Options
- 注入攻击防护:
- XSS:输入过滤/输出编码
- CSRF:Anti-CSRF Token
HTTP协议从1991年的HTTP/0.9发展到今天的HTTP/3,持续演进以满足现代Web应用的需求。理解其核心原理和工作机制是构建高性能、安全Web应用的基础。