HTTP连接经TCP三次握手建立,客户端发送请求,服务器解析后返回含状态码的响应,可保持连接或断开以释放资源
HTTP连接与服务器响应核心概念
HTTP连接建立过程
步骤 | 客户端行为 | 服务器行为 | 协议细节 |
1 | 解析域名(DNS查询) | 通过DNS获取IP地址 |
2 | 建立TCP连接 | 监听端口(默认80/443) | 三次握手完成连接 |
3 | 发送HTTP请求 | 接收请求并解析 | 基于HTTP协议规范 |
4 | 等待响应 | 处理请求并生成响应 | 包含状态码、头字段和主体 |
5 | 接收响应数据 | 关闭连接(可选) | HTTP/1.0默认关闭,HTTP/1.1可复用 |
HTTP请求报文结构
<请求行>
<头字段>
<空行>
<消息主体>
组成部分 | 示例 | 说明 |
请求行 | GET /index.html HTTP/1.1 | 包含方法、路径、协议版本 |
头字段 | Host: example.com
User-Agent: Mozilla/5.0 | 键值对形式传递元信息 |
消息主体 | username=admin&password=123 | POST方法携带的表单数据 |
HTTP响应报文结构
<状态行>
<头字段>
<空行>
<消息主体>
组成部分 | 示例 | 说明 |
状态行 | HTTP/1.1 200 OK | 协议版本+状态码+描述 |
头字段 | Content-Type: text/html
Content-Length: 1024 | 响应元数据 |
消息主体 | <html>...</html> | HTML文档或JSON数据 |
HTTP协议关键特性对比
特性 | HTTP/1.0 | HTTP/1.1 | HTTP/2 |
连接模式 | 短连接 | 长连接(默认) | 多路复用 |
管道化支持 | 否 | 是 | 强制多路复用 |
头压缩 | 否 | 否 | HPACK压缩 |
服务器推送 | 否 | 否 | 支持主动推送资源 |
常见状态码分类
类别 | 状态码范围 | 典型场景 |
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,403 Forbidden) |
5xx | 500-599 | 服务器错误(500 Internal Server Error,504 Gateway Timeout) |
HTTPS安全机制
- SSL/TLS加密:对传输数据进行对称加密(如AES)+ 非对称加密(RSA/ECDSA)
- 证书验证:
- 服务端提供数字证书(含公钥)
- 客户端验证证书颁发机构(CA)和域名匹配
- 完整性保护:使用消息认证码(HMAC)防止数据改动
- 端口差异:HTTP默认80,HTTPS默认443
相关问题与解答
Q1:HTTP/1.1与HTTP/2的主要性能差异是什么?
A:
| 对比维度 | HTTP/1.1 | HTTP/2 |
|———-|———-|——–|
| 连接复用 | 单个连接串行请求 | 多路复用(多请求并行) |
| 头压缩 | 无 | HPACK算法压缩头字段 |
| 二进制分帧 | 文本传输 | 二进制帧减少解析开销 |
| 服务器推送 | 需客户端发起 | 主动推送关联资源(如CSS/JS) |
Q2:为什么HTTP状态码301和302都表示重定向,但行为不同?
A:
| 状态码 | 语义区别 | 浏览器行为 | 适用场景 |
|——–|———-|————|———-|
| 301 | 永久重定向 | 缓存重定向结果,后续自动访问新地址 | 域名变更/永久迁移资源 |
| 302 | 临时重定向 | 每次仍请求原地址,不缓存新地址 | 临时维护/A/B