摘要
- RFC 5147 为
text/plain定义了字符位置、字符范围、行位置和行范围四类 URI 片段。 - 片段在资源取得之后由客户端解释,不参与服务器端的 URI 解析与表示获取。
- 位置从零计数,表示两个字符或两行之间的零长度边界,并不等于一段引文。
- 字符必须在解码后计数;字节数、代码点数与人眼看到的字形数可能不同。
- 无论 CRLF、LF、CR 或其他受支持形式,每个换行都只计为一个字符。
- 超出实体长度的位置会落到末尾,这种确定行为并不证明原目标仍存在。
- 倒序范围与语法错误必须被忽略,客户端不得擅自修正或猜测。
- 可选的
length与md5针对去除传输编码后的 MIME 实体,而非发布者身份。 - 客户端可以完全忽略完整性检查;字符集不一致还会使检查失效或转码不可靠。
- MD5 在这里可帮助发现偶然变化,却不是签名、发布权限或现代抗碰撞证明。
- 只显示片段可能隐藏法律小字、例外条件或安全域来源,正确定位也可能误导。
- 重大决策需要分别保存修订、实体、解码、上下文、发布者、授权与结果凭据。
风险来自正确裁剪
很多证据事故并不是链接漂移。链接可以精确地选中创建者指定的三行;问题是创建者没有把第四行纳入片段,或者界面故意只展示狭窄范围。RFC 5147 的安全章节直接指出:局部显示可能隐藏法律小字,也可能把类似站点密钥的材料放进误导性画面。
因此,“片段正确”与“陈述完整”不是同一个检查。一个真实文件、一个合法 URI、一个符合语法的范围,完全可以组合成错误结论。协议层没有能力判断哪一行是例外、定义或限制条件。
这正是证据系统必须保存上下文的原因。仅存片段 URI,会把选择范围的权力交给链接创建者;仅存截图,又无法重建原始实体、字符集和客户端处理过程。
# 后面的内容没有送到源站裁决
RFC 5147 沿用 URI 的分层方式:先解析并取得资源表示,再根据媒体类型在客户端解释片段。源站并不会收到片段并替读者核准“这几行就是有效条款”。
这种本地处理允许渐进部署。不支持 RFC 5147 的客户端仍能打开整个文件,只是不能定位子资源。对可用性而言,这是优点;对审计而言,它要求区分“文件打开”和“片段命中”。如果产品只记录 HTTP 成功,旧客户端的无选择展示也会被算作证据成功。
服务器日志同样不能单独证明用户看到了哪一段。服务器可以证明某个表示被请求,却通常不知道本地片段解释是否成功、范围是否超界、完整性参数是否检查、界面是否隐藏上下文。
位置从解码后的实体开始
RFC 5147 的字符位置不是字节偏移。多字节编码会让一个字符占用多个字节;UTF-16 还可能有不计入字符位置的字节序标记。Unicode 预组字符与基字符加组合附加符在视觉上近似,代码点数量却可能不同。
这意味着转换系统能在“文字看起来没变”的同时改变 char= 指向。文档归档、邮件网关、浏览器默认字符集与本地编辑器都可能参与。若原响应没有明确字符集,历史上 text/plain 的默认规则也不能被现代软件随意替换成未经记录的假设。
行位置还受换行约定影响。互联网文本通常使用 CRLF,本地系统可能使用 LF、CR、NEL 或其他序列。标准要求每个被识别的换行只算一个字符,但实现仍要知道当前协议和存储环境的约定。一个 HTTP 副本和一个 file: 副本可能显示相同段落,却并非同一计数实体。
落到文件末尾不是找到原文
标准规定,超过实际长度的位置指向实体的最后位置。这样可以让处理结果确定,但它不提供目标仍然存在的证明。
假设操作手册由 800 行缩减成 60 行。旧链接 line=700 仍可能把阅读器带到末尾。如果监控只看“片段处理无异常”,内容删除反而变成绿色状态。系统必须把超界收束单独记录,并在证据用途上视为失败。
开放范围也会随实体增长而扩张。省略起点表示从开头开始,省略终点表示一直到末尾。后来附加的内容可能自动进入选区,而链接创建者从未审阅它。
另一些错误处理更严格:倒序范围必须忽略;语法错误也必须忽略,不能猜测修复。这个规则保护可重复性,但界面如果默默显示整份文件,用户依然可能误以为目标成功定位。
完整性参数只回答有限问题
片段可以附带 length 或 md5。长度被标准明确称为很弱的检查。MD5 在去除内容编码和传输编码后,对 MIME 实体的二进制表示计算。两者都不是针对发布机构的身份证明。
客户端并非必须实现这些检查,可以全部忽略。若实现并发现实体变化,客户端应当不再解释片段,并可以提示用户。这种措辞意味着不同客户端可能给出不同处置;组织不能把“URI 内含 digest”误报为强制阻断。
检查还可能包含字符集。声明字符集与取得实体不同时,客户端不得直接使用检查。它可以先转码,但 RFC 5147 明说这种做法存在字符丢失或规范化风险。
RFC 6151 后来说明 MD5 不适合需要抗碰撞的用途,也不能用于数字签名。即使不考虑恶意碰撞,一个无密钥哈希也不回答“谁发布”“谁批准”“哪一版生效”。匹配值最多支持“在规定预处理下,这个实体与预期相同”这一层。
媒体类型决定片段语义
line= 与 char= 不是所有 URI 的通用解释。RFC 5147 只适用于 text/plain。某些协议或本地环境没有可靠媒体类型,客户端只能推断;标准将这种情况称为内在不可靠。
文件扩展名不是 MIME 证明。FTP 取得物、本地 file: URI 与 HTTP 响应可能提供不同元数据,也可能采用不同换行和字符集。证据记录应保存声明类型、有效类型与推断理由。
IANA 将 RFC 5147 记录到 text/plain 注册信息中。这证明协调对象存在,不证明具体浏览器已经实现、具体用户看到了告警,也不证明某个片段对应权威内容。注册表不是运行遥测。
建立可复核的引文凭据
高风险引用至少要保存:完整 URI、取得时间、响应验证器、媒体类型、字符集、解码实体哈希、换行策略、片段字符串、客户端版本、是否超界、所选文字及前后上下文。若需要证明发布者,还要另存签名、归档修订或机构来源链。
这组记录允许调查者区分失败位置。资源不可达属于取得层;哈希变化属于实体层;字符集分歧属于解码层;范围移动属于定位层;裁剪误导属于呈现层;无权发布属于治理层。把它们压成“链接有效”会把每个问题派给错误团队。
来源
- RFC 5147 HTML
- RFC 5147 文本
- RFC Editor 条目
- IETF Datatracker 条目
- RFC 5147 文档历史
- RFC 5147 勘误查询
- RFC 6838:媒体类型规范与注册
- RFC 2046:MIME 媒体类型
- RFC 3986:URI 通用语法
- RFC 3987:国际化资源标识符
- RFC 3629:UTF-8
- RFC 1321:MD5
- RFC 6151:MD5 安全考虑
- RFC 9110:HTTP 语义
- RFC 8089:file URI
- IANA 媒体类型注册表
- W3C Media Fragments URI 1.0
- Minimum Initial Specification, Localized Future Decision, and Voluntary Adoption
- On Reality Layers, Symbolic Power, and Why Clarity Feels So Hostile
- Running-Code Primacy
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
