本文介绍如何基于 gorilla mux(可选 negroni)构建支持版本化静态资源 url 的 go web 服务器,通过路径中的哈希标识(如 `/static/abc123/app.js`)映射到实际文件(如 `/build/app.js`),兼顾浏览器长期缓存与服务端灵活路由。
在构建现代 Web 应用时,为静态资源(JS、CSS、图片等)添加内容哈希(如 application.a1b2c3d4.js)是实现强缓存(Cache-Control: public, max-age=31536000)的关键实践。但有时出于部署简化或 CDN 兼容性考虑,开发者倾向将哈希置于路径而非文件名中,例如:
/static/876dsf5g87s6df5gs876df5g/application.js
该 URL 应透明地服务于磁盘上固定位置的文件(如 /build/application.js),同时忽略路径中的哈希段。Gorilla Mux 的路径变量能力恰好为此类“伪静态”路由提供了简洁解决方案。
✅ 核心思路:路径解析 + 安全映射
我们利用 Gorilla Mux 的命名路由变量({cache_id} 和 {filename})捕获哈希与真实文件名,再在 Handler 中验证哈希有效性(可选)、拼接物理路径,并安全响应文件内容。关键点包括: