第 7 章 · 03 请求路由与静态文件服务


文档摘要

第 7 章 · 03 请求路由与静态文件服务 本节摘要:解析出请求的「方法+路径」后,服务器要决定「这个请求由谁处理」。本节讲两件事:路由(按方法+路径分派到处理函数,支持静态/动态路径)、静态文件服务(把 URL 路径映射到磁盘文件,按扩展名设 Content-Type,防范路径穿越)。这一节让你的服务器从「只会返回固定内容」升级为「真正的应用后端」。 内容来源:基于 Web 服务器设计整理的导读。 学习目标 实现请求路由:按「方法+路径」分派到处理函数。 支持动态路径参数(如 )。 实现静态文件服务:URL→磁盘文件,按扩展名设 Content-Type。 防范路径穿越攻击(呼应姊妹篇《Linux 命令》第 2、4 章路径与 find)。

第 7 章 · 03 请求路由与静态文件服务

本节摘要:解析出请求的「方法+路径」后,服务器要决定「这个请求由谁处理」。本节讲两件事:路由(按方法+路径分派到处理函数,支持静态/动态路径)、静态文件服务(把 URL 路径映射到磁盘文件,按扩展名设 Content-Type,防范路径穿越)。这一节让你的服务器从「只会返回固定内容」升级为「真正的应用后端」。

内容来源:基于 Web 服务器设计整理的导读。

学习目标

  1. 实现请求路由:按「方法+路径」分派到处理函数。
  2. 支持动态路径参数(如 /users/:id)。
  3. 实现静态文件服务:URL→磁盘文件,按扩展名设 Content-Type。
  4. 防范路径穿越攻击(呼应姊妹篇《Linux 命令》第 2、4 章路径与 find)。

一、学习价值:从「玩具」到「应用」

只会返回固定「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。要点:

  • Content-Type 按扩展名:.html→text/html、.css→text/css、.png→image/png。维护一张扩展名映射表。
  • 目录默认 index.html:GET /./public/index.html
  • 404:文件不存在返回 404。

路径穿越防护(安全关键)

恶意请求 GET /../../etc/passwd,朴素映射会读到磁盘敏感文件!防护:把请求路径 normalize(消解 ..),检查结果是否仍在允许目录内。

请求: /../../etc/passwd normalize: 变成 /etc/passwd(消解 ..) 检查: /etc/passwd 是否在 ./public/ 下? 不是 → 拒绝(403)

呼应姊妹篇《Linux 命令》第 2 章相对路径、第 4 章 find 的安全意识。

三、上手第一步

  1. 维护路由表,先支持几个静态路径。
  2. 加动态路径参数(简单的模式匹配)。
  3. 加静态文件服务(按 URL 读磁盘文件,设 Content-Type)。
  4. 加路径穿越防护(normalize + 边界检查)。

本节要点回顾

  1. 路由表:(方法, 路径模式) → 处理函数;路径模式可含动态参数 :id
  2. 静态文件服务:URL→磁盘文件,按扩展名设 Content-Type,目录默认 index.html。
  3. 路径穿越防护:normalize 消解 ..,检查结果在允许目录内——这是 Web 安全关键。
  4. 无匹配返回 404;权限问题返回 403。

推荐上手顺序

  1. 静态路径路由(几个固定 URL)。
  2. 动态参数路由。
  3. 静态文件服务 + Content-Type。
  4. 路径穿越防护(必做)。
  5. 下一节:并发模型。

下一节讲并发——多连接如何同时处理。


发布者: 作者: 灏天文库 转发
评论区 (0)
U