Context
本站是文档与运维内容:用来阅读、检索、归档的页面。早期构想考虑过用动态应用服务器来渲染模板、管理会话或提供交互组件。内容本身对服务器端状态、按用户的认证逻辑或客户端渲染都没有要求。
Decision
用 Caddy 将一个预构建的静态树作为站点提供服务,发布时整棵目录一次性交换。边缘后面没有应用服务器、没有脚本通道、没有数据库。
Caddy(公共边缘)──HTTPS──► 静态/ 树(资源、HTML、SVG)
服务的契约由响应头(script-src 'none')与构建期检查强制,后者拒绝脚本与残缺产物。
后果
- 发布平淡: 发布是一次完整目录交换,因此没有状态迁移、没有 schema。
- 威胁面窄: 没有运行时执行用户输入,关闭了整类注入。
- 缓存诚实: 每个文件有稳定的字节身份与校验器。
- 接受的取舍: 没有交互、没有认证个性化、没有每用户 HTML。若确实需要,应作为独立的服务来组合,而不是并进这棵树。
为什么它胜过替代方案
动态层带来一个运行时、一个状态边界和一条更慢的编辑路径。对价值在文档本身的内容,这笔成本买来了内容用不到的能力。静态服务没有牺牲站点需要的任何东西,同时移除了只会让发布与安全边界变复杂的部分。
来源
- Caddy 文档:
file_server,在没有应用层的情况下提供静态根目录,已核验 2026-08-25。 - MDN:内容安全策略,限制边缘会执行什么,已核验 2026-08-25。