第2章 url 与资源
拆解URL方案、权限、路径、参数、查询、片段、相对引用、转义和多种方案
第2章 url 与资源
“第2章 url 与资源”锁定David Gourley、Brian Totty、Marjorie Sayer、Sailu Reddy、Anshu Aggarwal著,陈涓、赵振平译《HTTP权威指南》,人民邮电出版社,2012年,ISBN 9787115281487;英文原版HTTP: The Definitive Guide,O'Reilly Media,2002年9月,656页,ISBN 1565925092。O'Reilly官方页面确认英文首版的5个正文部分、21章和8个附录;中文版完整印刷目录另含“第六部分 附录”和索引。忠实度分母共586个部分、章、编号节/小节、附录与索引节点。
“第2章 url 与资源”未取得未获授权的完整中文正文;课程以 O’Reilly 官方在线版 与 章级导览 界定首版范围,中文解释、报文、实验和练习均为独立教学重写。现代语义仅以 RFC 9110、RFC 9111 和 RFC 9112 核对差异。
学习目标
- 能解释“第2章 url 与资源”的全部正式节点及其HTTP事务位置。
- 能绘制请求、响应、TCP连接、中间实体和资源状态。
- 能设计单变量实验,验证“URL每一部分都能按方案语法解释,解析与转义不会改变资源身份或误把片段发往服务器”。
- 能写出含首版边界、原始报文、故障、恢复和复核人的证据包。
从一条可证伪的HTTP事务开始
先预测:直接拼接字符串会在相对引用、保留字符、用户信息和非HTTP方案处产生歧义。把预测写成“URL/资源、连接、请求报文、中间实体、响应报文、身份与编码”六行,再运行客户端、代理或服务器。结果不同先定位首个字节或状态偏差。
本页主问题是:拆解URL方案、权限、路径、参数、查询、片段、相对引用、转义和多种方案。每条消息要注明发送者、接收者、HTTP版本、连接复用、逐跳/端到端首部、主体边界与历史协议状态。
验收不变量是:URL每一部分都能按方案语法解释,解析与转义不会改变资源身份或误把片段发往服务器。最终页面正常、状态码200或TLS通道建立都只是局部事实,不能单独证明资源身份、缓存变体、代理转发与证书身份全部正确。
核心词汇与首版边界
↡用方案和分层组件定位资源的URI形式、↡规定URL其余部分解释和访问协议的前缀、↡需要依据基础URL解析才能得到完整定位的引用、↡用百分号和十六进制字节安全表示受限字符的机制、↡由客户端解释且通常不随HTTP请求发送的资源内部标识
这些词汇固定在2002年英文首版和2012年中译本语境。在“第2章 url 与资源”中,HTTP/2、HTTP/3、OAuth、JWT、SameSite、HSTS和现代CDN行为只作独立比较,不得替换HTTP-NG、Digest、WebDAV、WPAD等首版节点。
核心机制深读
先从URL画出事务
拆解URL方案、权限、路径、参数、查询、片段、相对引用、转义和多种方案。先固定资源身份和请求目标,再标出客户端、中间实体与源服务器,任何优化或安全结论都不能跳过原始报文。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
区分URL与方案
URL和方案可能在同一事务中协作,但责任、状态位置和失败语义不同。对比正常请求、单个首部变化和单个连接故障,定位首个偏差。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
让相对URL经过真实中间实体
代理、缓存、网关或隧道会读取、添加、删除或转发不同首部。逐跳记录Via、Connection列出的字段、缓存决策和认证边界。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
验证转义的历史语境
原书写于2002年,以HTTP/1.0、HTTP/1.1、SSL/TLS早期版本和当时Web基础设施为背景。现代实现可做对照,但不能冒充原书节点。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
用片段关闭证据门
URL每一部分都能按方案语法解释,解析与转义不会改变资源身份或误把片段发往服务器。证据至少包含原始请求/响应、TCP时间线、中间状态、失败注入、恢复动作和第三方复核。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
首版机制逐项深读
第2章 url 与资源
验证“第2章 url 与资源”只改变一个 URI 组成部分,同时观察 DNS 目标、Host 与请求路径;若三者一起变化,就无法归因。
2.1 浏览因特网资源
“2.1 浏览因特网资源”位于 HTTP 基础模型:URI 标识资源,请求与响应组成事务,媒体类型解释表示,中间组件在不破坏端到端语义的前提下转发或处理消息。
2.2 url 的语法
验证“2.2 url 的语法”只改变一个 URI 组成部分,同时观察 DNS 目标、Host 与请求路径;若三者一起变化,就无法归因。
2.2.1 方案——使用什么协议
“2.2.1 方案——使用什么协议”用基准 URI、目标 URI 与最终请求目标三列核对,尤其区分相对引用解析、默认端口和只在客户端使用的片段。
2.2.2 主机与端口
“2.2.2 主机与端口”在本章用于回答“拆解URL方案、权限、路径、参数、查询、片段、相对引用、转义和多种方案”。学习时必须把这个名称落到具体报文、连接、中间状态或历史规范,并说明它改变了哪项可观察结果。
2.2.3 用户名和密码
验证“2.2.3 用户名和密码”分别执行正确凭据、错误凭据和重放事务;摘要输入、时间状态与失败代码都可复算,结论才可交接。
2.2.4 路径
验证“2.2.4 路径”只改变一个 URI 组成部分,同时观察 DNS 目标、Host 与请求路径;若三者一起变化,就无法归因。
2.2.5 参数
验证“2.2.5 参数”只改变一个 URI 组成部分,同时观察 DNS 目标、Host 与请求路径;若三者一起变化,就无法归因。
2.2.6 查询字符串
“2.2.6 查询字符串”属于资源标识链:方案决定解释规则,权限部分给出主机与端口,路径、参数和查询参与请求目标,片段只在客户端定位表示内部位置。
2.2.7 片段
验证“2.2.7 片段”只改变一个 URI 组成部分,同时观察 DNS 目标、Host 与请求路径;若三者一起变化,就无法归因。
2.3 url 快捷方式
“2.3 url 快捷方式”属于资源标识链:方案决定解释规则,权限部分给出主机与端口,路径、参数和查询参与请求目标,片段只在客户端定位表示内部位置。
2.3.1 相对url
“2.3.1 相对url”用基准 URI、目标 URI 与最终请求目标三列核对,尤其区分相对引用解析、默认端口和只在客户端使用的片段。
2.3.2 自动扩展url
“2.3.2 自动扩展url”用基准 URI、目标 URI 与最终请求目标三列核对,尤其区分相对引用解析、默认端口和只在客户端使用的片段。
2.4 各种令人头疼的字符
“2.4 各种令人头疼的字符”区分字符编码、语言标记与显示字形:发送端声明表示元数据,接收端按注册规则解析,不能由外观猜测。
2.4.1 url 字符集
解释“2.4.1 url 字符集”时先写原始 URI,再标出规范化与百分号编码的位置;客户端显示文本不能替代真正发送的请求目标字节。
2.4.2 编码机制
“2.4.2 编码机制”的失败会表现为消息串线、解码错误或错误变体;仅凭 200 状态无法证明实体完整且可解释。
2.4.3 字符限制
“2.4.3 字符限制”属于资源标识链:方案决定解释规则,权限部分给出主机与端口,路径、参数和查询参与请求目标,片段只在客户端定位表示内部位置。
2.4.4 另外一点说明
“2.4.4 另外一点说明”在本章用于回答“拆解URL方案、权限、路径、参数、查询、片段、相对引用、转义和多种方案”。学习时必须把这个名称落到具体报文、连接、中间状态或历史规范,并说明它改变了哪项可观察结果。
2.5 方案的世界
“2.5 方案的世界”属于资源标识链:方案决定解释规则,权限部分给出主机与端口,路径、参数和查询参与请求目标,片段只在客户端定位表示内部位置。
2.6 未来展望
“2.6 未来展望”用于区分 2002 年首版观察与后续 HTTP 演进:先复原原书当时的限制,再把现代 RFC 结论作为单独对照,二者不能互相冒充。
2.7 更多信息
“2.7 更多信息”是原书的延伸资料入口,不增加新的协议结论;使用时必须记录资料版本、适用的 HTTP 年代和与本章结论的对应关系。
复原原始HTTP事务
固定URL、资源、连接与版本,写出请求行、首部、主体、响应和所有中间实体。
HTTP/1.1 message laboratory
第2章 url 与资源
拆解URL方案、权限、路径、参数、查询、片段、相对引用、转义和多种方案
GET /resource?chapter=%E7%AC%AC2%E7%AB%A0%20url%20%E4%B8%8E%E8%B5%84%E6%BA%90 HTTP/1.1 Host: example.test Connection: keep-alive
章内坐标:第2章 url 与资源、2.1 浏览因特网资源、2.2 url 的语法、2.2.1 方案——使用什么协议、2.2.2 主机与端口、2.2.3 用户名和密码、2.2.4 路径、2.2.5 参数
可复现实验记录
GET /resource HTTP/1.1
Host: example.test
Connection: keep-alive
Accept: */*HTTP/1.1 200 OK
Date: Tue, 01 Jan 2002 00:00:00 GMT
Content-Type: text/plain
Content-Length: 5
helloevidence = request_bytes + response_bytes + tcp_timeline + intermediary_state + recovery动手试:保存一次正常请求、一次缓存或连接边界和一次单变量故障。记录客户端、代理、缓存、网关与源服务器看到的原始报文,以及统一时间戳和恢复动作。
独立证据门
最小证据包包含:首版节点、URL、原始请求/响应、连接时间线、代理与缓存决策、身份和编码、单变量故障、恢复、偏差、责任人与复核人。
练习
练习
问题 1:为什么“第2章 url 与资源”必须固定2002年首版?
问题 2:怎样构造“直接拼接字符串会在相对引用、保留字符、用户信息和非HTTP方案处产生歧义”的最小反例?
问题 3:何时可以认为本页完成独立交接?
本章回顾
“第2章 url 与资源”的核心是拆解URL方案、权限、路径、参数、查询、片段、相对引用、转义和多种方案。真正掌握不是记首部名,而是能用原始报文、连接和中间状态证明资源如何被定位、传输、缓存、保护与交付。
名词解释
本章出现的专业名词,用大白话再讲一遍。
- URL
用方案和分层组件定位资源的URI形式。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。
- 方案
规定URL其余部分解释和访问协议的前缀。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。
- 相对URL
需要依据基础URL解析才能得到完整定位的引用。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。
- 转义
用百分号和十六进制字节安全表示受限字符的机制。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。
- 片段
由客户端解释且通常不随HTTP请求发送的资源内部标识。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。