5.6 KiB
5.6 KiB
HTTP与HTTPS
目录
HTTP协议
HTTP 简介
// HTTP:HyperText Transfer Protocol
// 超文本传输协议
// 应用层协议
// 基于 TCP/IP
HTTP 特点
- 无状态:每次请求独立,不保存状态
- 请求-响应:客户端请求,服务器响应
- 明文传输:数据不加密(HTTPS 加密)
HTTP 请求格式
请求行:方法 路径 协议版本
请求头:键值对
空行
请求体:数据(可选)
示例:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
HTTP 响应格式
状态行:协议版本 状态码 状态描述
响应头:键值对
空行
响应体:数据
示例:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234
<html>...</html>
HTTPS协议
HTTPS 简介
// HTTPS:HTTP over SSL/TLS
// 安全的 HTTP 协议
// 使用 SSL/TLS 加密
HTTPS 工作原理
1. 客户端请求 HTTPS 连接
2. 服务器返回证书
3. 客户端验证证书
4. 客户端生成对称密钥,用服务器公钥加密
5. 服务器用私钥解密,获得对称密钥
6. 使用对称密钥加密通信
SSL/TLS 握手
// SSL/TLS 握手过程
// 1. Client Hello:客户端发送支持的加密算法
// 2. Server Hello:服务器选择加密算法,返回证书
// 3. Client Key Exchange:客户端生成密钥,用服务器公钥加密
// 4. Change Cipher Spec:切换到加密通信
// 5. Finished:握手完成
HTTP/2
HTTP/2 特性
- 多路复用:一个连接可以处理多个请求
- 头部压缩:压缩请求头和响应头
- 服务器推送:服务器可以主动推送资源
- 二进制分帧:使用二进制格式
HTTP/2 vs HTTP/1.1
| 特性 | HTTP/1.1 | HTTP/2 |
|---|---|---|
| 连接 | 多个连接 | 单个连接 |
| 多路复用 | ❌ | ✅ |
| 头部压缩 | ❌ | ✅ |
| 服务器推送 | ❌ | ✅ |
HTTP/3
HTTP/3 特性
- 基于 UDP:使用 QUIC 协议
- 更快连接:减少握手时间
- 更好的拥塞控制
- 连接迁移:切换网络不断开连接
请求方法
GET
// GET:获取资源
// 参数在 URL 中
// 幂等性:是
// 安全性:是(不修改资源)
GET /user?id=1 HTTP/1.1
POST
// POST:创建资源
// 参数在请求体中
// 幂等性:否
// 安全性:否(修改资源)
POST /user HTTP/1.1
Content-Type: application/json
{"name": "John", "email": "john@example.com"}
PUT
// PUT:更新资源(完整更新)
// 幂等性:是
// 安全性:否
PUT /user/1 HTTP/1.1
{"name": "Jane", "email": "jane@example.com"}
PATCH
// PATCH:更新资源(部分更新)
// 幂等性:否
// 安全性:否
PATCH /user/1 HTTP/1.1
{"name": "Jane"}
DELETE
// DELETE:删除资源
// 幂等性:是
// 安全性:否
DELETE /user/1 HTTP/1.1
状态码
2xx 成功
// 200 OK:请求成功
// 201 Created:创建成功
// 204 No Content:成功但无内容
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:服务不可用
请求头与响应头
常用请求头
// Host:服务器地址
Host: www.example.com
// User-Agent:客户端信息
User-Agent: Mozilla/5.0
// Content-Type:请求体类型
Content-Type: application/json
// Authorization:认证信息
Authorization: Bearer token
// Cookie:Cookie 信息
Cookie: session_id=123
常用响应头
// Content-Type:响应体类型
Content-Type: application/json
// Content-Length:响应体长度
Content-Length: 1234
// Set-Cookie:设置 Cookie
Set-Cookie: session_id=123; Path=/
// Cache-Control:缓存控制
Cache-Control: max-age=3600
// Location:重定向地址
Location: https://www.example.com/new
安全机制
1. HTTPS
// 使用 HTTPS 加密传输
// 防止数据被窃听和篡改
2. 认证
// Basic 认证
Authorization: Basic base64(username:password)
// Bearer 认证(Token)
Authorization: Bearer token
// OAuth 2.0
Authorization: Bearer access_token
3. CORS
// 跨域资源共享
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST
Access-Control-Allow-Headers: Content-Type
面试常见问题
Q1: HTTP 和 HTTPS 的区别?
答案:
- HTTP:明文传输,不加密
- HTTPS:使用 SSL/TLS 加密传输,更安全
Q2: HTTP 请求方法?
答案:
- GET:获取资源
- POST:创建资源
- PUT:更新资源(完整)
- PATCH:更新资源(部分)
- DELETE:删除资源
Q3: HTTP 状态码?
答案:
- 2xx:成功
- 3xx:重定向
- 4xx:客户端错误
- 5xx:服务器错误
Q4: HTTP/2 的特性?
答案:
- 多路复用
- 头部压缩
- 服务器推送
- 二进制分帧
最后更新:2024年