响应
请求主线的最后一步:你的函数返回一个值,Handler::call 对它调 into_response(),得到一个 Response<Body> 交回路由层。提取失败时的 rejection 也走同一条路。axum 不规定返回类型,只要求实现 IntoResponse,这一部分讲这个 trait 能做到什么、做不到什么。
- IntoResponse 与 IntoResponseParts:现成实现大多是「造 body + 加
Content-Type」;元组先生成最后的 body,再从左到右套用中间的部件,最后设状态码,所以StatusCode只能放最前或最后;数组和HeaderMap替换同名头,AppendHeaders追加;自定义错误类型实现IntoResponse是惯用法,(StatusCode, Json)会盖掉序列化失败的 500。 - SSE 与重定向:
Sse把Event流逐个变成 body 帧,Event按调用顺序写name: value行,data拆换行、其他字段遇换行 panic;KeepAlive在空闲满间隔(默认 15 秒)时发:\n\n;Redirect只有 303、307、308。
flowchart TB ret["handler 返回值"] --> ir["IntoResponse"] rej["rejection"] --> ir ir --> plain["字符串、字节、Json、Html"] ir --> tup["元组:部件 + body"] ir --> sse["Sse:流式 body"] ir --> redir["Redirect:状态码 + Location"] plain --> resp["Response Body"] tup --> resp sse --> resp redir --> resp
💬 关联讨论
发起讨论加载中...