C++ WebServer / 10
静态文件服务:让服务器返回 HTML/CSS/JS
静态文件服务让 WebServer 从 echo server 变成真正能托管页面的 HTTP server。这个站点本身就是它的资源用例。
这一阶段要解决什么问题
服务器不能只返回固定字符串。它需要根据 URL 查找资源目录中的文件,返回 HTML、CSS、JS、图片和 favicon。
原来的实现有什么缺陷
固定响应无法承载真实站点,也无法验证 MIME、路径安全、文件不存在、权限不足等 HTTP 服务常见问题。
我是怎么改的
GET 请求先把 URL 映射到本地资源路径,使用 stat 检查文件存在性、类型和权限,再用 mmap 映射文件,通过 writev 聚合响应头和文件内容。
核心代码 / 关键逻辑
GET /index.html
-> Resources/index.html
-> stat() check
-> mmap() file
-> writev(headers + file body)MIME 映射包括 .html、.css、.js、.png、.svg、.ico 等常见静态资源类型。
踩坑记录
路径映射很容易漏掉斜杠或使用绝对路径。提交记录里有 “Add a /” 和 “Get current work path instead of absolute path” 的修复,说明资源根目录和 URL 拼接要非常谨慎。