HTTP
HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP 是 Web 数据通信的基础,它定义了客户端和服务器之间请求和响应的标准。
HTTP 特点
- 无状态 :每个请求都是独立的,服务器不会保留之前请求的信息
- 可扩展 :通过 HTTP 标头可以轻松扩展功能
- 客户端-服务器模式 :由客户端发起请求,服务器返回响应
- 简单快速 :客户端向服务器发送请求时,只需传送请求方法和路径
- 灵活 :允许传输任意类型的数据对象
HTTP 版本演进
HTTP/1.0
- 最早在 1996 年发布
- 每次请求都需要建立一个 TCP 连接
- 支持有限的请求方法(GET、POST、HEAD)
- 不支持持久连接
HTTP/1.1
- 1997 年发布,目前应用最广泛的版本
- 引入持久连接(Connection: keep-alive)
- 增加了更多请求方法(PUT、DELETE、OPTIONS 等)
- 支持管道化请求(pipelining)
- 引入内容协商机制
- 缓存控制机制更加完善
HTTP/2
- 2015 年发布
- 二进制分帧层,不再使用文本格式
- 多路复用,允许同时通过单一 TCP 连接发送多个请求
- 头部压缩,减少网络开销
- 服务器推送,允许服务器主动向客户端推送资源
HTTP/3
- 基于 QUIC 协议,使用 UDP 而非 TCP
- 改进的拥塞控制和丢包恢复机制
- 减少了连接建立的延迟
- 更好的移动网络支持
HTTP 请求方法
方法 | 描述 | 是否包含请求体 | 是否安全 | 是否幂等 |
---|---|---|---|---|
GET | 获取资源 | 否 | 是 | 是 |
POST | 提交数据 | 是 | 否 | 否 |
PUT | 上传或替换资源 | 是 | 否 | 是 |
DELETE | 删除资源 | 可选 | 否 | 是 |
HEAD | 获取响应头 | 否 | 是 | 是 |
OPTIONS | 获取支持的方法 | 否 | 是 | 是 |
PATCH | 部分修改资源 | 是 | 否 | 否 |
CONNECT | 建立隧道连接 | 否 | 否 | 否 |
TRACE | 追踪请求路径 | 否 | 是 | 是 |
HTTP 状态码
1xx - 信息性状态码
- 100 Continue :服务器已收到请求头,客户端应继续发送请求体
- 101 Switching Protocols :服务器正在切换协议
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 :资源不存在
- 405 Method Not Allowed :不允许使用该请求方法
- 429 Too Many Requests :请求过于频繁
5xx - 服务器错误状态码
- 500 Internal Server Error :服务器内部错误
- 502 Bad Gateway :网关错误
- 503 Service Unavailable :服务暂时不可用
- 504 Gateway Timeout :网关超时
HTTP 头部字段
通用头部
- Cache-Control :指定缓存机制
- Connection :控制网络连接选项
- Date :消息生成的日期和时间
- Transfer-Encoding :指定传输编码方式
请求头部
- Accept :指定客户端接受的内容类型
- Accept-Encoding :指定可接受的内容编码
- Authorization :包含身份验证信息
- Host :指定请求的服务器域名和端口
- User-Agent :客户端应用类型、操作系统、软件开发商等信息
- Cookie :之前由服务器通过 Set-Cookie 发送的 Cookie 信息
响应头部
- Access-Control-Allow-Origin :指定允许跨域的域名
- ETag :资源的特定版本的标识符
- Location :用于重定向的 URL
- Set-Cookie :服务器发送的 Cookie
- WWW-Authenticate :指定身份验证方案
实体头部
- Content-Encoding :指定内容的编码方式
- Content-Length :指定内容的长度
- Content-Type :指定内容的类型
- Expires :指定内容的过期时间
- Last-Modified :指定内容的最后修改时间
HTTP 缓存机制
强缓存
- Expires :指定资源过期的绝对时间
- Cache-Control :更精确的缓存控制
- max-age :指定资源有效期
- no-cache :需要验证才能使用缓存
- no-store :禁止缓存
协商缓存
- Last-Modified/If-Modified-Since :基于资源修改时间的验证
- ETag/If-None-Match :基于资源内容的验证
HTTPS
HTTPS(HTTP Secure)是 HTTP 协议的安全版本,它通过 SSL/TLS 协议进行加密通信。
HTTPS 的优势
- 数据加密 :防止数据被窃听
- 数据完整性 :防止数据被篡改
- 身份认证 :确保与正确的服务器通信
HTTPS 的工作原理
- 握手阶段 :客户端与服务器建立安全连接
- 证书验证 :客户端验证服务器的数字证书
- 密钥交换 :安全地交换对称加密的密钥
- 加密通信 :使用对称加密进行后续通信
HTTP 安全
常见的 HTTP 安全问题
- 跨站脚本攻击(XSS) :注入恶意脚本
- 跨站请求伪造(CSRF) :伪造用户请求
- 中间人攻击 :拦截并可能修改通信内容
- 会话劫持 :窃取用户会话标识
安全最佳实践
- 使用 HTTPS 加密通信
- 实施内容安全策略(CSP)
- 使用 HTTP 严格传输安全(HSTS)
- 设置适当的 Cookie 属性(Secure, HttpOnly, SameSite)
- 实施适当的身份验证和授权机制