漂亮的 URI 也可能很丑(2023)
Cloudflare Pages 会把 `.html` 文件自动、永久地重定向到无扩展名 URL,这重新点燃了关于什么样的网页地址才算“cool”且稳定的争论。评论者权衡了简洁、与技术无关的 URL 的好处与直接暴露 `.html` 的实际便利性,也担心托管服务商在不提供退出选项的情况下擅自改变 URL 方案,并重新讨论了 W3C 的理想:链接应当在几十年内保持有效。讨论还扩展到链接腐烂、重定向、REST 风格路径与查询参数之间的取舍,以及暴露文件扩展名等实现细节是否真的会损害长期可维护性。
Cloudflare / GitHub 行为与重定向
- Cloudflare Pages 会自动将
.html重定向到无扩展名 URL,并将其视为永久重定向;一些人认为这是一种关键且侵入性的“功能”,应当采用显式选择加入。 - 也有人认为,这在许多静态主机和 Web 服务器中早已是长期行为,根源在于文件系统扩展名与 URL 内容类型之间的不匹配。
- 批评主要集中在永久性(301)和缺乏配置选项;支持者则将其视为产品决策,而不是 bug。
- GitHub Pages 也有类似的映射规则(
/foo→foo.html,文件夹 →folder/→folder/index.html),但通常不会使用永久重定向。
Cool URI、扩展名与未来兼容性
- W3C 关于“不变的 Cool URI”的立场,以及对
.html的反对观点,被重新讨论。 - 一些人认为,扩展名暴露了后端细节,并可能导致未来的破坏;另一些人则说
.html已经足够稳定,对典型网站来说不太可能改变。 - 一种常见的务实观点是:如果你选择
.html并保持稳定,那它就成了“cool”的 URL;切换后端时应适配现有 URL,而不是反过来。 - 有些框架甚至把扩展名直接与 MIME 类型(
.json、.xml等)绑定,作为调试辅助。
什么算“丑” URL
- 许多参与者把“丑”保留给很长、参数很多或用哈希编码的 URL,而不是简单的
/year/slug.html。 - 历史上的例子包括充满逗号的 CMS URL、fragment 中的 JSON blob、跟踪查询字符串,以及复杂的企业应用 URL。
- 带有 ID 和 slug 的静态路径(
/category/123/post-name)被视为一种不错的折中:既有稳定标识符,又便于人类阅读。
重定向、链接腐烂与责任
- 一派观点认为:站点运营者没有义务永远保留 URL;“cool URI”的说法有时会显得像说教。
- 另一派认为:维护重定向成本很低且体现礼貌;链接腐烂主要是目标页面发生变化,而不是链接作者的问题。
- 有人建议,即使是静态站点工作流,也可以自动生成简单的重定向页面或 meta-refresh。
实现细节与监控方面的顾虑
- 一种常见模式是:
/blog/slug/目录配合index.html,有时每篇文章都会这样做,以便放置相关资源。 - 内容协商和替代格式(Markdown、多语言变体)常常与静态生成器的假设相冲突。
- 可观测性从业者不喜欢把用户数据放在路径段里,因为这会让指标和日志处理更复杂;他们更偏好查询参数。
URI 与 URL
- 文中简要回顾了 URI、URL、URN 及其 RFC 传承。
- 许多人同意,在日常 Web 工作中,“URL”才是唯一真正实用的术语,即使从技术上说“URI”更为广义。