Skip to content

静态文件中间件

静态文件中间件用于高效地处理和提供 HTML、CSS、JS、图片等静态资源请求,是 Web 应用开发中不可或缺的基础能力。

静态文件中间件典型时序图

说明

  • 静态文件中间件会先访问文件系统获取文件的元信息(如最后修改时间、文件大小),用于生成 ETag。
  • 生成 ETag 后,与客户端的 If-None-Match 头进行比对。
  • 如果 ETag 匹配,直接返回 304 Not Modified,无需读取文件内容。
  • 如果 ETag 不匹配,才会读取文件内容并返回。
  • 这样既保证了缓存的高效性,也最大限度减少了磁盘 IO。

快速启动

只需 4 步即可应用静态文件服务:

cangjie
import spire_web_hosting.*
import spire_web_http.*
import spire_web_staticfiles.*

main() {
    // 1.构建Web主机
    let builder = WebHost.createBuilder()
    let host = builder.build()

    // 2. 启用欢迎页中间件(可选)
    host.useDefaultFiles()

    // 3. 启用静态文件中间件
    host.useStaticFiles()

    // 4. 启动主机
    host.run()
}

添加依赖

需要在依赖配置文件(cjpm.toml)中添加如下依赖:

bash
[dependencies]
  spire_web_http = { path = "/spire_web_http"}
  spire_web_hosting = { path = "/spire_web_hosting"}
  spire_web_routing = { path = "/spire_web_routing"}
  spire_extensions_options = { path = "/spire_extensions_options"}
  spire_extensions_injection = { path = "/spire_extensions_injection"}
  spire_web_staticfiles = { path = "/spire_web_staticfiles"}

默认文件中间件

欢迎页中间件会自动查找 wwwroot 目录下的默认首页文件(如 index.html )。支持自定义欢迎页文件名:

cangjie
host.useDefaultFiles { options =>
    // 添加自定义欢迎页文件名
    options.defaultFileNames.add("welcome.html")
}

静态文件中间件配置

支持自定义内容类型映射、默认内容类型等高级选项:

cangjie
host.useStaticFiles { options =>
    // 自定义内容类型映射
    let contentTypeProvider = ContentTypeProvider()
    contentTypeProvider.mappings[".bcmap"] = "application/octet-stream"
    options.contentTypeProvider = contentTypeProvider
}

或设置默认内容类型:

cangjie
host.useStaticFiles { options =>
    options.serveUnknownFileTypes = true
    options.defaultContentType = "application/octet-stream"
}

目录结构建议

bash
项目根目录/
├─ src/
  ├─ main.cj
  └─ ...
├─ wwwroot/
  ├─ html/
  ├─ css/
  ├─ index.html
  └─ ...
└─ ...

资源管理

所有静态资源建议统一放置于 wwwroot 目录下,便于统一管理和访问。

最佳实践

  • 推荐将所有前端静态资源(HTML、CSS、JS、图片等)集中放在 wwwroot 目录。
  • 使用 useDefaultFiles() 可自动支持首页访问体验。
  • 通过 useStaticFiles() 提供高性能的静态资源服务。
  • 如需自定义内容类型或支持特殊文件扩展名,可通过 contentTypeProvider 配置。