HTTP协议详解
一、HTTP协议概述
HTTP(HyperText Transfer Protocol)是应用层协议,用于客户端和服务器之间的通信。
特点:
- 无状态协议
- 基于请求-响应模型
- 简单可扩展
- 支持多种数据类型
二、HTTP版本
HTTP/1.0
- 每次请求都建立新连接
- 请求完成后断开连接
HTTP/1.1
- 默认持久连接(Keep-Alive)
- 支持管道化
- 支持分块传输
- 增加Host头
HTTP/2.0
- 二进制分帧
- 多路复用
- 头部压缩
- 服务端推送
HTTP/3.0
- 基于QUIC协议
- 使用UDP替代TCP
- 减少连接建立延迟
三、HTTP请求
请求方法
| 方法 | 作用 | 幂等 | 安全 |
|---|---|---|---|
| GET | 获取资源 | 是 | 是 |
| POST | 创建资源 | 否 | 否 |
| PUT | 更新资源 | 是 | 否 |
| DELETE | 删除资源 | 是 | 否 |
| PATCH | 部分更新 | 否 | 否 |
| HEAD | 获取响应头 | 是 | 是 |
| OPTIONS | 获取支持的方法 | 是 | 是 |
请求报文结构
1 | 请求行:方法 URL 版本 |
示例:
1 | POST /api/user HTTP/1.1 |
常用请求头
| 头部 | 作用 |
|---|---|
| Host | 服务器域名 |
| Content-Type | 请求体类型 |
| Content-Length | 请求体长度 |
| Authorization | 认证信息 |
| Accept | 可接受的响应类型 |
| User-Agent | 客户端信息 |
| Cookie | 客户端Cookie |
| Connection | 连接管理 |
| Cache-Control | 缓存控制 |
四、HTTP响应
响应报文结构
1 | 状态行:版本 状态码 原因短语 |
示例:
1 | HTTP/1.1 200 OK |
常用响应头
| 头部 | 作用 |
|---|---|
| Content-Type | 响应体类型 |
| Content-Length | 响应体长度 |
| Set-Cookie | 设置Cookie |
| Cache-Control | 缓存控制 |
| Location | 重定向地址 |
| Access-Control-Allow-Origin | CORS |
五、Content-Type
常见类型
| 类型 | 说明 |
|---|---|
| application/json | JSON数据 |
| application/x-www-form-urlencoded | 表单数据 |
| multipart/form-data | 文件上传 |
| text/html | HTML |
| text/plain | 纯文本 |
| application/xml | XML数据 |
六、Cookie和Session
Cookie
服务器通过Set-Cookie响应头设置,浏览器自动携带。
属性:
- Domain:域名
- Path:路径
- Expires/Max-Age:过期时间
- HttpOnly:禁止JS访问
- Secure:仅HTTPS传输
- SameSite:跨站策略
Session
服务器端存储的会话信息。
流程:
- 客户端首次请求
- 服务器创建Session,返回SessionID
- 客户端存储SessionID到Cookie
- 后续请求携带SessionID
Token
无状态认证方式。
流程:
- 客户端发送凭证
- 服务器验证后签发Token
- 客户端存储Token
- 后续请求在Authorization头携带Token
七、HTTPS
HTTPS = HTTP + SSL/TLS。
TLS握手过程
- 客户端发送支持的加密套件和随机数
- 服务器选择加密套件,返回证书和随机数
- 客户端验证证书,生成预主密钥
- 客户端用服务器公钥加密预主密钥发送
- 双方计算对称密钥
- 使用对称密钥加密通信
证书
- 由CA机构签发
- 包含公钥和持有者信息
- 浏览器验证证书链
八、跨域(CORS)
同源策略
协议、域名、端口相同为同源。
CORS机制
简单请求:
- 浏览器自动添加Origin头
- 服务器返回Access-Control-Allow-Origin
预检请求:
- 浏览器先发送OPTIONS请求
- 服务器返回允许的方法和头部
- 浏览器再发送实际请求
1 | // SpringBoot配置CORS |
九、缓存机制
强缓存
不发送请求,直接使用缓存。
- Cache-Control:max-age=3600
- Expires:过期时间
协商缓存
发送请求验证资源是否更新。
- Last-Modified / If-Modified-Since
- ETag / If-None-Match
返回304表示资源未修改,使用缓存。
十、总结
HTTP协议要点:
- 请求-响应模型
- 多种请求方法和状态码
- Cookie/Session/Token认证方式
- HTTPS保证传输安全
- CORS解决跨域问题
- 缓存机制提升性能
HTTP是Web开发的基础,理解其原理有助于排查问题和优化性能。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 夏天的风吹向哪里!
