HTTP基于请求-响应模型,客户端通过TCP连接发送请求,服务器解析后返回响应(含状态码),协议无状态,支持持久连接优化传输效率
HTTP协议基础
HTTP(HyperText Transfer Protocol)是应用层协议,基于TCP/IP模型实现,用于客户端与服务器之间的超文本传输,其核心特点是:

- 无状态:每次请求独立,服务器不保留上下文
- 请求-响应模型:客户端发起请求,服务器返回响应
- 文本协议:报文可读,包含请求行/状态行、头部、主体
HTTP请求报文结构
组成部分 | 说明 | 示例 |
请求行 | 包含方法、URL、HTTP版本 | GET /index.html HTTP/1.1 |
请求头 | 键值对形式的元信息 | Host: www.example.com<br>User-Agent: Mozilla/5.0 |
空行 | 分隔头部和主体 | | |
请求体 | 携带数据(POST时存在) | name=John&age=30 |
HTTP响应报文结构
组成部分 | 说明 | 示例 |
状态行 | 包含协议版本、状态码、描述 | HTTP/1.1 200 OK |
响应头 | 服务器元信息 | Content-Type: text/html |
空行 | 分隔头部和主体 | | |
响应体 | 返回的数据内容 | <html>...</html> |
常见HTTP请求方法
方法 | 用途 | 示例场景 |
GET | 获取资源 | 网页访问、文件下载 |
POST | 提交数据 | 表单提交、API调用 |
PUT | 更新资源 | 文件覆盖上传 |
DELETE | 删除资源 | 删除云端文件 |
标准HTTP状态码分类
类别 | 状态码范围 | 含义 | 示例 |
1xx | 100-199 | 信息响应 | 100 Continue |
2xx | 200-299 | 成功处理 | 200 OK, 204 No Content |
3xx | 300-399 | 重定向 | 301 Moved Permanently, 302 Found |
4xx | 400-499 | 客户端错误 | 400 Bad Request, 404 Not Found |
5xx | 500-599 | 服务端错误 | 500 Internal Server Error, 503 Service Unavailable |
HTTP传输过程详解
- DNS解析:将域名转换为IP地址(如
www.example.com → 93.184.216.34
) - TCP连接:通过3次握手建立可靠连接(SYN→SYN-ACK→ACK)
- 发送请求:客户端构造HTTP请求报文并通过TCP发送
- 服务器处理:
- 解析请求
- 生成响应报文
- 关闭连接(HTTP/1.0)或保持连接(HTTP/1.1+)
- 接收响应:客户端解析响应报文并渲染内容
HTTP/1.1持久连接特性
特性 | 说明 |
Connection: keep-alive | 默认保持连接,允许复用同一TCP通道发送多个请求 |
管线化 | 同一连接可发送多个请求,但响应顺序必须与请求顺序一致 |
队头阻塞 | 前一个请求未完成时,后续请求被阻塞 |
关键头部字段解析
头部字段 | 作用 |
Content-Type | 声明资源MIME类型(如text/html; charset=utf-8 ) |
Content-Length | 指定消息体字节长度,用于告知传输总大小 |
Host | 指定目标服务器域名(HTTP/1.1强制要求) |
Cookie | 携带客户端存储的Cookie数据 |
Set-Cookie | 服务器设置Cookie,客户端后续请求会自动携带 |
常见问题与解答
Q1:GET和POST的核心区别是什么?
A1:主要差异体现在:
- 参数位置:GET参数在URL中,POST参数在请求体
- 数据安全:GET参数暴露在URL,POST参数相对隐蔽
- 数据长度:GET受URL长度限制(约2048字符),POST无理论限制
- 语义用途:GET用于安全获取资源,POST用于修改服务器状态
- 缓存机制:GET可被缓存,POST通常不缓存
Q2:HTTP和HTTPS的主要区别?
A2:核心差异对比表:
| 特性 | HTTP | HTTPS |
|—————|———————–|———————————|
| 端口 | 80 | 443 |
| 加密方式 | 明文传输 | SSL/TLS加密 |
| 证书需求 | 无 | 需要CA签发的数字证书 |
| 计算开销 | 低 | 加密解密增加CPU消耗 |
| 数据完整性 | 无校验 | 防止内容被改动 |
| URL格式 | http://example.com
| https://example.com
|