第 7 章 · 03 请求路由与静态文件服务 本节摘要:解析出请求的「方法+路径」后,服务器要决定「这个请求由谁处理」。本节讲两件事:路由(按方法+路径分派到处理函数,支持静态/动态路径)、静态文件服务(把 URL 路径映射到磁盘文件,按扩展名设 Content-Type,防范路径穿越)。这一节让你的服务器从「只会返回固定内容」升级为「真正的应用后端」。 内容来源:基于 Web 服务器设计整理的导读。 学习目标 实现请求路由:按「方法+路径」分派到处理函数。 支持动态路径参数(如 )。 实现静态文件服务:URL→磁盘文件,按扩展名设 Content-Type。 防范路径穿越攻击(呼应姊妹篇《Linux 命令》第 2、4 章路径与 find)。
本节摘要:解析出请求的「方法+路径」后,服务器要决定「这个请求由谁处理」。本节讲两件事:路由(按方法+路径分派到处理函数,支持静态/动态路径)、静态文件服务(把 URL 路径映射到磁盘文件,按扩展名设 Content-Type,防范路径穿越)。这一节让你的服务器从「只会返回固定内容」升级为「真正的应用后端」。
内容来源:基于 Web 服务器设计整理的导读。
/users/:id)。只会返回固定「Hello」的服务器是玩具。真正的应用要:不同 URL 返回不同内容(路由)、能提供文件下载(静态服务)。本节带你跨过这道坎。同时,路径穿越是 Web 安全的经典坑,理解它你才能写出安全的服务器。
维护一张「(方法, 路径模式) → 处理函数」表:
("GET", "/") → 处理函数 A ("GET", "/users/:id") → 处理函数 B(动态参数 id) ("POST", "/users") → 处理函数 C
收到请求,查表;路径模式匹配时提取动态参数(如 /users/42 匹配 /users/:id,id=42);无匹配返回 404。
把 URL 路径映射到磁盘:GET /index.html → 读 ./public/index.html。要点:
.html→text/html、.css→text/css、.png→image/png。维护一张扩展名映射表。GET / → ./public/index.html。恶意请求 GET /../../etc/passwd,朴素映射会读到磁盘敏感文件!防护:把请求路径 normalize(消解 ..),检查结果是否仍在允许目录内。
请求: /../../etc/passwd normalize: 变成 /etc/passwd(消解 ..) 检查: /etc/passwd 是否在 ./public/ 下? 不是 → 拒绝(403)
呼应姊妹篇《Linux 命令》第 2 章相对路径、第 4 章 find 的安全意识。
(方法, 路径模式) → 处理函数;路径模式可含动态参数 :id。..,检查结果在允许目录内——这是 Web 安全关键。下一节讲并发——多连接如何同时处理。