Rust in Everything
基于 tower-http 0.7.1

在本站中

本站是开源的,仓库在 yuxuetr/rustineverything。这一部分的链接都指向提交 ceffc19(2026-10-31),行号以它为准。本站锁的是 tower-http 0.6.11,和本卷的 0.7.1 不同,所以实测分两步:对开发服务器发只读请求看 0.6.11 的现状,再用实验 crate 复现同样的层组合,对照 0.7.1。

  1. 用到的两样与手写的四样:CompressionLayer 只开 gzip、br;ServeDir 在 nest_service 下的目录跳转丢前缀、超长文件名回 500 且没有日志。体积上限、安全头、尾斜杠、/js 的缓存头为什么手写:前两样有真实的理由(按路径分上限;0.6.11 的多头层在 axum 里编译不过),尾斜杠要 308 而不是改写,缓存头换不换都行。
  2. 升到 0.7.1 会怎样:依赖树里另外三个 crate 都要求 ^0.6.8,所以先不升;#678、#693、#691、#727、#661、#718 逐条对本站实测;CsrfLayer 只给评估。
flowchart TB
  site["本站 app"] --> used["用到:CompressionLayer、ServeDir"]
  site --> hand["手写:体积上限、安全头、尾斜杠、缓存头"]
  used --> up["升级差异"]
  hand --> up
  up --> deps["依赖树:dioxus、reqwest 要求 ^0.6.8"]

网关不用 tower,用 Pingora 的钩子组织逻辑,tower 卷 中间件栈 的最后一节已经讲过,这里不重复。

💬 关联讨论

发起讨论
加载中...