目录
一图胜千言:HTTP核心机制图解
一、HTTP本质:通信的桥梁
- 
定义:超文本传输协议(HyperText Transfer Protocol) 
- 
定位:应用层协议,基于TCP/IP协议栈 
- 
核心作用:规范客户端(浏览器)与服务器间的数据交换格式 
二、五大核心特性解析
- 
请求-响应模型 经典流程 : 客户端:GET /index.html HTTP/1.1 服务端:HTTP/1.1 200 OK → <html>...</html>
- 特点:客户端主动发起,服务器被动响应
2.无状态协议
- 
痛点:服务器不记忆用户状态(如登录信息) 
- 
解决方案: - 
Cookie:客户端存储的小型数据(4KB限制)
- 
Session:服务端存储状态(Session ID通过Cookie传递)
- 
JWT:现代分布式系统常用方案
 
- 
3.URL:资源的身份证
https://www.example.com:443/path/page?query=param#fragment
├─ 协议     └─ 域名       └─端口└─路径     └─查询参数  └─锚点- 特殊字符需URL编码(如空格→%20)
4.请求方法:操作语义化
| 方法 | 幂等性 | 安全 | 典型应用场景 | 
|---|---|---|---|
| GET | ✔️ | ✔️ | 获取资源(查询操作) | 
| POST | ✘ | ✘ | 提交数据(创建资源) | 
| PUT | ✔️ | ✘ | 完整更新资源 | 
| PATCH | ✘ | ✘ | 局部更新资源 | 
| DELETE | ✔️ | ✘ | 删除资源 | 
幂等性:多次执行效果相同
5.状态码:服务器的反馈语言
- 
1xx:信息类(如101 Switching Protocols)
- 
2xx:成功- 
200 OK:标准成功响应 
- 
201 Created:资源创建成功 
- 
204 No Content:响应无body(删除成功) 
 
- 
- 
3xx:重定向- 
301 Moved Permanently:永久重定向 
- 
302 Found:临时重定向 
- 
304 Not Modified:缓存有效(性能优化关键!) 
 
- 
- 
4xx:客户端错误- 
400 Bad Request:请求语法错误 
- 
401 Unauthorized:未认证 
- 
403 Forbidden:无权限 
- 
404 Not Found:资源不存在 
 
- 
- 
5xx:服务器错误- 
500 Internal Server Error:通用服务器错误 
- 
502 Bad Gateway:网关错误 
- 
503 Service Unavailable:服务不可用 
 
- 
三、HTTP头部:隐藏的控制中心
GET /api/data HTTP/1.1
Host: api.example.com
User-Agent: Mozilla/5.0
Accept: application/json
Authorization: Bearer xxxxxxx- 
关键头部: - 
Content-Type:数据类型(text/html,application/json)
- 
Cache-Control:缓存策略(max-age=3600)
- 
Set-Cookie:设置客户端Cookie
- 
ETag:资源标识(缓存验证利器)
 
- 
四、连接管理:性能关键点
- HTTP/1.1 持久连接
- 
默认保持连接: Connection: keep-alive
- 
管线化(pipelining):并行发送请求(实践中受限) 
- HTTP/2 革命性改进
- 
二进制分帧 
- 
多路复用:解决队头阻塞 
- 
头部压缩(HPACK算法) 
- 
服务器推送 
五、HTTPS:安全的HTTP 
- 
核心机制: - 
非对称加密:建立安全连接 
- 
对称加密:传输加密数据 
- 
数字证书:验证服务器身份 
 
- 
开发者必知实践技巧
- 用开发者工具调试(Chrome DevTools):
- 
查看Network面板中的请求/响应详情 
- 
模拟慢速网络(Throttling) 
2.缓存策略优化:
Cache-Control: public, max-age=31536000
ETag: "33a64df551425fcc55e4d42a148795d9"- RESTful API设计原则:
- 
资源导向(URI代表资源) 
- 
HTTP方法对应CRUD操作 
- 
状态码精确表达结果 
经典面试题 :GET与POST的本质区别?
答案:
- 
GET参数在URL中,POST在请求体 
- 
GET有长度限制(浏览器约2KB),POST无限制 
- 
GET幂等适合查询,POST非幂等适合修改 
- 
GET可缓存,POST默认不缓存