2026-06-09 增加默认文档支持 + 路由流程重构
路由流程重构:按扩展名分流
原问题:静态文件判断在路由之前,导致目录重定向和默认文档会跳过用户注册的路由(如 /some/dir 被重定向到 /some/dir/,路由永远匹配不到)。
解决方案:按路径最后一段是否含点号分流
请求 /css/style.css → "style.css" 含点号 → 静态文件快速通道(跳过路由)
请求 /api/users → "users" 无点号 → 路由优先通道
请求 /some/dir → "dir" 无点号 → 路由优先通道
请求 / → "" 无点号 → 路由优先通道路由优先通道流程:
- 前置中间件
- 匹配用户路由(Dictionary O(1))
- 自动路由(CallByName)
- 静态文件兜底(目录重定向 + 默认文档)
- 404
快速通道流程:
- IsStaticFile 判断 → 直接 Response.File
- 不在索引中也尝试直接发送(深层子目录文件)
- 无 WebRoot 则回退走路由
默认文档功能
- 默认文档查找:请求目录路径时按顺序查找
index.html、index.htm、default.html、default.htm - 目录重定向:无尾部斜杠的目录请求 302 到带
/的路径 - 根路径
/支持:IsStaticFile("/")返回 True - 自定义默认文档:
HttpSvr.AddDefaultDocument("home.html") - 目录无默认文档返回 403
Response.Redirect(Url)方法:新增 302 重定向
修改文件
| 文件 | 修改内容 |
|---|---|
cHttpServerSvr.cls | 新增 m_DefaultDocuments、AddDefaultDocument、GetDefaultDocuments、IsStaticFile 支持 / |
cHttpServerResponse.cls | File 方法增加目录判断+默认文档查找、新增 Redirect 方法 |
cHttpServerRouter.cls | 按扩展名分流重构整个路由流程 |