Skip to main content

Module middleware

Module middleware 

Source
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 决定是否挂载本层。