3.1 Web的起源
沿 URI 创建、目标解析、HTTP 请求、表示返回和超文本跟随追踪 Web 的起源,用 URI/URL/服务器路径边界实验建立开放协议心智模型。
学习目标
- 能沿创建URI、解析目标、HTTP请求、返回表示和跟随链接追踪一次超文本访问
- 能区分 URI、URL、服务器文件路径、资源和表示,解释开放协议如何让客户端与服务器分别实现
- 能在正常、相对链接和非法目标场景中定位首个偏离,并从清空解析状态重放访问
为什么需要这一机制
Web 的起源不只是把文档放到网络上,而是把“资源是什么”“如何找到它”“如何交换它”拆成开放合同。URI 标识资源,HTTP 交换表示,超文本链接连接资源;客户端不需要知道服务器内部文件布局,服务器也不需要绑定某个客户端实现。
核心合同
↡本页把 Web 起源重构为:URI 标识资源,HTTP 根据请求交换表示,超文本链接把一个资源关系连接到另一个资源。资源不是表示,URI 也不是服务器文件路径。一个 URI 可以映射到动态生成的表示、不同媒体类型或重定向目标;客户端要依据 HTTP 状态和表示合同继续行动。
五个节点到机制证据
创建URI
↡为资源或资源关系创建稳定的统一标识,不把服务器磁盘路径当作客户端可见合同。记录 scheme、authority、path、query、fragment 和基准 URI。标识应描述资源关系,内部部署路径不应成为隐含依赖。
解析目标
↡依据基准 URI、相对链接和解析规则得到下一次请求的目标,并检查目标是否属于允许范围。相对链接必须和当前文档基准一起解释;解析后的目标还要经过协议、主机、端口和安全策略检查。
HTTP请求
↡用 HTTP 方法、请求目标、头部和可选内容请求资源表示,形成客户端与服务器的开放交换合同。记录方法、目标、Accept、认证、缓存条件和请求体。请求发送成功不等于资源存在,也不等于返回表示满足客户端需求。
返回表示
↡服务器根据请求返回状态码、头部和表示内容,告诉客户端资源是否可用以及下一步如何处理。分别保存状态码、媒体类型、长度、缓存语义和表示摘要。404、重定向和内容协商失败都应在协议层明确区分。
跟随链接
↡客户端从当前表示中读取超文本链接,结合基准 URI 解析并发起下一次资源请求。跟随不是无条件跳转:检查 scheme、来源、权限和重定向次数,记录每次链接解析和目标请求,防止循环和越权。
最小可重放实现
base = "https://example.test/docs/index.html"
target = resolve(base, "../api/item?id=7")
response = request(target, accept="application/json")
assertTrace(base, target, response.status, response.representation)
assertTrue(resetAndFollow(base, "../api/item?id=7") == baselineTrace)这段草图只表达 URI、HTTP 和表示合同,不复制书中叙事或代码。实际复核应保存基准 URI、解析目标、请求消息、状态码、媒体类型、表示和复位结果。
五步复核一次超文本访问
1. 创建稳定 URI
固定资源关系、scheme、authority、path、query 和 fragment,区分公开标识与服务器内部文件路径。
Lab
URI 解析与表示实验
一次只改变基准、链接或目标策略,观察解析结果和下一次请求。
绝对 URI 直接解析到允许的资源表示
base=— → https://example.test/a → GET → 200 text/html → follow
判定
通过:资源标识与表示语义一致,跟随次数可重放
当前场景:绝对 URI;记录基准 URI、解析目标、请求、状态码、媒体类型、跟随次数和复位。
正常、边界与故障证据
| 场景 | 只改变的变量 | 预期判定 | 必存证据 |
|---|---|---|---|
| 正常 | 绝对 URI、可达资源、兼容表示 | 请求与链接关系可重放 | 基准、目标、请求、状态、表示 |
| 边界 | 相对 URI、重定向或媒体类型变化 | 解析和协议语义明确,目标在策略内 | 基准、解析、状态、媒体类型 |
| 故障 | 内部路径泄漏、非法 scheme 或链接循环 | 在首个标识/安全边界拒绝 | 原 URI、解析链、拒绝原因、复位 |
专属因果实验
先预测创建、解析、请求、表示和跟随五个节点,再运行绝对 URI 基线;然后一次只切换基准 URI、相对路径或目标 scheme。实验显示解析链、请求方法、状态码、媒体类型和跟随次数,避免把“看起来像地址”当成合法资源标识。
Lab
URI 解析与表示实验
一次只改变基准、链接或目标策略,观察解析结果和下一次请求。
绝对 URI 直接解析到允许的资源表示
base=— → https://example.test/a → GET → 200 text/html → follow
判定
通过:资源标识与表示语义一致,跟随次数可重放
当前场景:绝对 URI;记录基准 URI、解析目标、请求、状态码、媒体类型、跟随次数和复位。
故障诊断:从基准 URI 找首个解析偏离
- 核对标识语义:区分资源、URI、URL 和服务器文件路径,确认公开合同没有泄漏内部实现。
- 核对基准解析:比较文档基准、相对链接、规范化结果和安全策略,定位第一处目标变化。
- 核对 HTTP 表示:检查方法、状态、媒体类型和重定向,区分 URI 存在与表示可用。
- 核对链接历史:限制循环、权限和重定向次数,清除解析缓存后从基线重放。
术语表
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 3.1 Web的起源
用 URI、HTTP、表示和超文本链接连接分布式资源的开放协议模型。
- 创建URI
为资源或资源关系创建稳定统一标识的阶段。
- 解析目标
结合基准 URI 和相对链接得到下一次请求目标的阶段。
- HTTP请求
用方法、请求目标和消息字段请求资源表示的阶段。
- 返回表示
以状态码、头部和内容返回资源处理结果的阶段。
- 跟随链接
从当前表示解析超文本关系并发起下一次目标请求的阶段。
练习
练习
问题 1: 为什么服务器文件路径不能直接替代 URI?
问题 2: 相对链接解析时为什么必须保存基准 URI?
问题 3: HTTP 返回 404、重定向和媒体类型不匹配为什么要分开处理?
本页小结
3.1 Web的起源的关键不是记住一个地址格式,而是沿创建URI、解析目标、HTTP请求、返回表示和跟随链接保存资源与表示的边界证据。完成标准是区分 URI、URL 与内部路径,在首个解析、状态或媒体类型偏离处修复,并用清空状态后的重放证明超文本关系可复现。