📄 一句话概括
Web 服务器把请求行的 URI 映射到磁盘文件:文档根目录+URI;URI 以斜杠结尾按默认文件补全——1.1.3 的客户端规则在这里有服务端的回声。
📝 本节和前面几节的关系
6.2 的协议栈活干完了,数据上交 Web 服务器程序;本篇看它第一步做什么。
一、映射规则
GET /images/logo.png -> 文档根目录 + URI -> /var/www/html/images/logo.png(读出文件内容当响应体); URI 以 / 结尾是目录 -> 按默认文件(index.html 等)补全。
二、虚拟主机
一台服务器挂多个域名时,按请求头里的 Host 字段 区分是哪个站——各有各的文档根目录。
三、动手 Demo:URI 变文件名
Web 服务器把 URI 映射到磁盘文件:
for s in ['GET /images/logo.png',
-> 文档根目录 + URI',
-> /var/www/html/images/logo.png']:
print(s)
print()
print('URI 以 / 结尾是目录 -> 按默认文件(index.html)补全')
实跑输出:
--------------------------------------------------------------------
URI 变文件名
--------------------------------------------------------------------
Web 服务器把 URI 映射到磁盘文件:
GET /images/logo.png
-> 文档根目录 + URI
-> /var/www/html/images/logo.png
URI 以 / 结尾是目录 -> 按默认文件(index.html)补全;
1.1.3 讲的客户端规则,在这里有服务端的回声。
文件不存在就回 404——1.1.6 说的【4 开头客户端的错】, 最常见的 404 就诞生在这一步。
30 秒实验
- 在本机搭个简单目录树,演算一遍映射。
- 想想 Host 头在虚拟主机场景为什么必需。
- 用 curl 请求一个不存在的路径,看状态码。
常见误区
- 以为 URI 直接是文件全路径——前面还垫着文档根目录。
- 以为 404 是服务器坏了——多数只是文件真不在。
自测三问(点开对答案)
1. URI 怎么变文件路径? —— 文档根目录+URI。 2. URI 以斜杠结尾意味着? —— 是目录,补默认文件。 3. 虚拟主机靠什么区分站点? —— Host 请求头。- ☐ 下一节(6.3.2 运行 CGI 程序)
相关笔记
- 省略文件名的情况 — 客户端侧的同一规则
- 发送请求后会收到响应 — 状态码从哪来
- 🔌 网络是怎样连接的 · 索引