跳转到内容

错误流程

本页说明内部失败如何变成紧凑的客户端 HTTP 或 SSE 错误。

内部错误
RequestError / ConfigError / UpstreamError / TranslationError / SseError / ByteStreamError
分类
选择稳定的客户端错误 type 和 status
保留安全细节
保留有用上游 headers,同时不泄漏私有数据
渲染
根据响应是否已开始,渲染 HTTP body 或 SSE error event
客户端错误
text 或 JSON ErrorResponseSpec
错误族用于
RequestError入站 body 解析和客户端请求校验失败。
ConfigError配置加载、配置文件读取、route/provider 校验和启动配置失败。
InternalError代理运行时不变量、本地文件系统 IO、body 读取、序列化和边界失败。
UpstreamErrorProvider 发送失败、非成功状态和上游 body 读取失败。
TranslationError协议 payload 转换失败。
SseError / SseTranslationErrorSSE event 语义和流式转换失败。
ByteStreamErrorByte stream carrier 失败。
规则原因
不要逐字暴露内部 taxonomy客户端 type 应稳定且紧凑。
Payload 总是包含数字 statusSSE error event 在 stream 开始后无法再改变 HTTP status。
上游提供时保留有用诊断 headersRetry-After、upstream request id 和 rate-limit headers 有助于调试。
不要伪造上游 codeparam这些值只有上游实际提供时才存在。
不要记录私有 request body 或 Authorization headers错误默认也必须隐私安全。
Carrier行为
HTTP 响应开始前按配置渲染普通 HTTP error,payload 为 text 或 JSON。
SSE stream 开始后尽可能渲染协议兼容 error event;payload 中包含 status。
上游非 2xx投影为配置的客户端错误格式,并保留安全 headers。
Stream 语义失败返回/发出能区分 incomplete terminal semantics 与正常完成的错误。
关注点归属
Domain error taxonomysrc/error/
SSE 语义失败src/sse.rs 和 streaming translation modules
Byte stream carrierssrc/http_support/
Proxy 请求生命周期src/lib.rs 和 pipeline modules