Back to VNotes

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 拼接要非常谨慎。