|
NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
|
HTTP协议及操作 更多...
专题 | |
| WebSocket | |
| WebSocket升级协议实现 | |
类 | |
| class | http_client |
| HTTP客户端类 更多... | |
| struct | http_client_response |
| HTTP客户端响应结构 更多... | |
| struct | http_client_request |
| HTTP客户端请求结构 更多... | |
| class | http_filter |
| HTTP过滤器基类 更多... | |
| class | http_filter_chain |
| HTTP过滤器链 更多... | |
| class | cors_filter |
| CORS跨域过滤器 更多... | |
| class | logging_filter |
| 日志记录过滤器 更多... | |
| class | static_file_filter |
| 静态文件服务过滤器 更多... | |
| class | rate_limit_filter |
| 限流过滤器 更多... | |
| class | authentication_filter |
| 认证过滤器 更多... | |
| class | http_router |
| HTTP路由器类 更多... | |
| class | http_server |
| HTTP/HTTPS服务器类 更多... | |
| struct | http_server_request |
| HTTP服务器请求结构 更多... | |
| struct | http_server_response |
| HTTP服务器响应结构 更多... | |
| struct | http_cookie |
| HTTP Cookie结构 更多... | |
| struct | http_session |
| HTTP会话结构 更多... | |
类型定义 | |
| using | http_request = http_server_request |
| HTTP请求类型别名 | |
| using | http_response = http_server_response |
| HTTP响应类型别名 | |
HTTP协议及操作
本模块提供了完整的 HTTP/1.1 协议支持,涵盖客户端与服务端消息结构、Cookie与会话管理、 路由分发、中间件过滤器链以及 WebSocket 升级协议。
本实现严格遵循以下 IETF RFC 与相关标准规范:
HTTP/1.1 核心协议:
HTTP 状态码与头字段注册:
HTTP 认证与安全:
Cookie 与会话管理:
CORS 跨域资源共享:
WebSocket 协议:
MIME 类型规范:
根据 RFC 9110 §15,HTTP 状态码按百位数字分类:
| 类别 | 状态码范围 | 含义 | 典型状态码 |
|---|---|---|---|
| 1xx | 100 – 199 | 信息响应 | 100 Continue, 101 Switching Protocols |
| 2xx | 200 – 299 | 成功 | 200 OK, 201 Created, 204 No Content |
| 3xx | 300 – 399 | 重定向 | 301 Moved Permanently, 302 Found, 304 Not Modified |
| 4xx | 400 – 499 | 客户端错误 | 400 Bad Request, 403 Forbidden, 404 Not Found |
| 5xx | 500 – 599 | 服务器错误 | 500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable |
根据 RFC 9110 §9,本模块支持以下标准 HTTP 方法:
| 方法 | RFC 引用 | 语义 | 幂等性 | 安全性 |
|---|---|---|---|---|
| GET | §9.3.1 | 检索资源表示 | 是 | 是 |
| POST | §9.3.3 | 提交数据进行处理 | 否 | 否 |
| PUT | §9.3.4 | 替换或创建资源 | 是 | 否 |
| DELETE | §9.3.5 | 删除资源 | 是 | 否 |
| HEAD | §9.3.2 | 获取 GET 响应的头部 | 是 | 是 |
| OPTIONS | §9.3.7 | 获取服务器支持的方法 | 是 | 是 |
| TRACE | §9.3.8 | 回显请求(调试用) | 是 | 是 |
| CONNECT | §9.3.6 | 建立隧道(用于代理) | 否 | 否 |
| PATCH | RFC 5789 | 部分更新资源 | 否 | 否 |
根据 RFC 6265 §4.1,Cookie 支持以下属性:
| 属性 | 说明 |
|---|---|
| Domain | 指定 Cookie 可用的域名 |
| Path | 指定 Cookie 可用的路径前缀 |
| Expires | 指定过期时间(绝对时间) |
| Max-Age | 指定有效期(相对秒数),优先级高于 Expires |
| Secure | 仅通过 HTTPS 传输 |
| HttpOnly | 禁止 JavaScript 访问,缓解 XSS 攻击 |
| SameSite | 跨站请求策略:Strict(禁止跨站)、Lax(允许顶级导航)、None |
根据 Fetch 标准,CORS 使用以下响应头:
| 响应头 | 说明 |
|---|---|
| Access-Control-Allow-Origin | 允许访问的源 |
| Access-Control-Allow-Methods | 允许的 HTTP 方法 |
| Access-Control-Allow-Headers | 允许的请求头 |
| Access-Control-Allow-Credentials | 是否允许携带凭证(Cookie) |
| Access-Control-Max-Age | 预检请求结果缓存时间 |
根据 RFC 6455,WebSocket 协议规范:
**握手升级**:
**帧结构**(RFC 6455 §5.2):
| 字段 | 位数 | 说明 |
|---|---|---|
| FIN | 1 | 是否为消息的最后一帧 |
| RSV1-3 | 3 | 保留位,用于扩展 |
| Opcode | 4 | 帧类型:Continuation(0)、Text(1)、Binary(2)、Close(8)、Ping(9)、Pong(10) |
| MASK | 1 | 客户端到服务器的帧必须设置掩码 |
| Payload len | 7/7+16/7+64 | 负载长度 |
| Masking key | 0/32 | 掩码密钥(仅客户端帧) |
**关闭状态码**(RFC 6455 §7.4):
| 状态码 | 名称 | 说明 |
|---|---|---|
| 1000 | Normal Closure | 正常关闭 |
| 1001 | Going Away | 端点离开(如浏览器关闭) |
| 1002 | Protocol Error | 协议错误 |
| 1003 | Unsupported Data | 接收到不支持的数据类型 |
| 1008 | Policy Violation | 违反策略 |
| 1009 | Message Too Big | 消息过大 |
| 1011 | Internal Error | 服务器内部错误 |
| 特性 | 规范参数 |
|---|---|
| HTTP 版本 | HTTP/1.1(RFC 9112) |
| 头部字段大小写 | 不区分大小写,存储为原始大小写 |
| Cookie 解析 | 支持 Set-Cookie 和 Cookie 头 |
| 会话标识符 | 支持 JESSIONID, SESSIONID, PHPSESSID 等常见名称 |
| 路由匹配 | 支持静态路径、路径参数(:id)、通配符(*)、正则表达式 |
| 中间件执行顺序 | 预过滤 → 核心过滤 → 路由处理 → 后过滤 |
| WebSocket 心跳 | 周期性发送 Ping 帧,等待 Pong 响应 |