Expand description
Axum 中间件与启动期纯函数。
从 main.rs 抽出的、可独立测试的服务端 HTTP 中间件(cache-control、admin
守卫、上一发布资源保留窗口)。响应压缩在 crate::compression。整体 server-only。
这些函数此前散落在 main.rs,既无法单独测试也使入口职责过载。迁移后
startup.rs 的路由组装以全路径 crate::middleware::xxx 引用,语义不变。
Constants§
- IMMUTABLE 🔒
- PANIC_
RESPONSE_ 🔒BODY - 请求处理 panic 时返回给客户端的固定文案;panic 内容只写日志。
- PKG_
ENTRY_ 🔒PREFIX - 前端入口文件前缀(
[package.metadata.leptos] output-name = "yggdrasil")。 - PUBLIC_
DEFAULT 🔒 - 其余公开 GET 的默认值:5 分钟新鲜期,过期后 1 小时内可先给旧内容再后台校验。
Functions§
- add_
cache_ 🔒control - Axum 中间件:为公开页面和静态资源附加 Cache-Control 头。
- admin_
guard 🔒 - Axum 中间件:
/admin*的 SSR 层认证守卫。 - admin_
guard_ 🔒allows admin_guard的放行判定。- cache_
control_ 🔒for_ path - 根据请求路径、查询串和方法决定公开页面的 Cache-Control 头。 返回 None 表示不添加缓存头(保留现有行为或避免覆盖)。
- catch_
panic_ 🔒layer - 把 handler 及其内层中间件在响应头发出前的 panic 转成 500。
- is_
dynamic_ 🔒html - 服务端渲染的 HTML 只在源站能主动失效时才允许共享缓存:白名单匿名页由
ssr_cache::cache_public_html自行设置(边缘缓存 + 写入后清 EdgeOne),其余页面 (查询串变体、搜索、404 等)一律no-cache,否则 CDN 会把改过或删掉的内容再给 5 分钟。/doc/下是随发版更新的静态 rustdoc 页面,不在此列。 - is_
hashed_ 🔒doc_ file - rustdoc 产物里文件名带内容哈希、内容永不变化的文件:
- is_
hashed_ 🔒pkg_ file /pkg/下的文件名是否形如<name>.<22 位 [A-Za-z0-9_-]>.<扩展名>(cargo-leptos 的内容哈希命名)。- panic_
response 🔒 - previous_
asset_ 🔒file - 解析旧发布目录中可能命中的带 hash 资源。只放行 /pkg/(cargo-leptos 内容
寻址产物目录);URI path 保持百分号编码原样映射,任何非常规组件(
..、 根/父目录引用)都不是 Normal 分量,直接拒绝;文件不存在返回 None。 - previous_
release_ 🔒assets - Axum 中间件(由 startup.rs 按需挂载):旧发布资源保留窗口(plan §6.7)。
- share_
context_ 🔒middleware - Axum 中间件:把分享元信息所需的站点信息(地址、简介、站点图地址)放进 GET 请求
扩展,页面服务端渲染时由
components::share_meta同步读取(类型见crate::models::share::ShareContext)。位于 HTML 缓存内层, 缓存命中时不执行。 - ssr_
generation_ 🔒middleware - Axum 中间件:把当前 SSR 全局世代号注入请求扩展,并对 GET 请求的响应附加
X-SSR-Generation头。世代号同时保护应用 HTML 缓存,阻止失效前的在途响应回填。 - version_
headers_ 🔒middleware - Axum 中间件:为所有响应附加 Server / X-Yggdrasil-Version / X-Yggdrasil-Git / X-Yggdrasil-Hash 头。
数据源与启动日志
log_build_info()同源(crate::build_info::BUILD_INFO)。 受EXPOSE_VERSION_HEADERS控制——该开关在startup.rs决定是否挂载本层。