Context

本站是文档与运维内容:用来阅读、检索、归档的页面。早期构想考虑过用动态应用服务器来渲染模板、管理会话或提供交互组件。内容本身对服务器端状态、按用户的认证逻辑或客户端渲染都没有要求。

Decision

用 Caddy 将一个预构建的静态树作为站点提供服务,发布时整棵目录一次性交换。边缘后面没有应用服务器、没有脚本通道、没有数据库。

Caddy(公共边缘)──HTTPS──► 静态/ 树(资源、HTML、SVG)

服务的契约由响应头(script-src 'none')与构建期检查强制,后者拒绝脚本与残缺产物。

后果

  • 发布平淡: 发布是一次完整目录交换,因此没有状态迁移、没有 schema。
  • 威胁面窄: 没有运行时执行用户输入,关闭了整类注入。
  • 缓存诚实: 每个文件有稳定的字节身份与校验器。
  • 接受的取舍: 没有交互、没有认证个性化、没有每用户 HTML。若确实需要,应作为独立的服务来组合,而不是并进这棵树。

为什么它胜过替代方案

动态层带来一个运行时、一个状态边界和一条更慢的编辑路径。对价值在文档本身的内容,这笔成本买来了内容用不到的能力。静态服务没有牺牲站点需要的任何东西,同时移除了只会让发布与安全边界变复杂的部分。

来源