类别:定律
类型:网络/系统互操作性原则
来源:乔恩·波斯特尔;TCP 规范(如 RFC 793,1981)
别名:健壮性原则
类型:网络/系统互操作性原则
来源:乔恩·波斯特尔;TCP 规范(如 RFC 793,1981)
别名:健壮性原则
快速回答 — 波斯特尔定律(Postel’s Law)即健壮性原则:发送时保守,接收时宽容(不同文献措辞略异)。它帮助早期互联网协议在实现不完美时仍能互通。今天它仍是设计启发式,也备受争议——因为宽容若不与安全审查配对,可能固化缺陷并扩大攻击面。
什么是波斯特尔定律?
波斯特尔定律(Postel’s Law)给协议实现一条指引:发出的字节严格符合规范,但在仍能恢复语义时对输入解析更宽容。目标是规范演进、实现各异时的互操作。它与 康威定律(系统结构映射协作结构——维度不同)相邻;与 布鲁克斯定律(加人增协调成本——正交,但都影响交付)可对照。不同于 墨菲定律,波斯特尔是规范性原则,而非宿命论。发送严谨、接收包容曾撑起早期网络——直到模糊性变成可利用面。
波斯特尔定律的三层理解
- 入门:旧客户端可能发来古怪空白;服务器仍可拒绝非法帧,但对无害差异可规范化处理。
- 实践者:输出走规范编码;输入用白名单校验、记录异常并显式版本化行为。
- 进阶:把宽容当作安全预算——当代讨论警告「按 bug 互通」会在生态里固化漏洞。
起源
乔恩·波斯特尔在早期 TCP/IP 工作中提出健壮性原则。广泛引用的表述见于 RFC 793(《传输控制协议》,1981 年 9 月),要求 TCP 实现在发送行为上保守、在符合规范意图的前提下对接收分段保持健壮。措辞在后续文档中有演变,但严格生成与宽容消费成对出现成为协议、解析器与 API 工程的底层俗语。核心要点
用波斯特尔最大化兼容性——再测量宽容何时伤害安全。应用场景
映射到现代 API 与平台设计。协议与解析器
发出严格的 JSON 或 protobuf;接收层用验证尽早拒绝含糊或超大输入。
Web 前端
保存时规范化用户输入;渲染仍要转义——宽容体验不是 SQL 注入赦免。
协作规范
你对外承诺要精确;对同事表述方式可在约定标准内保留善意弹性。
向后兼容
API 显式版本化;用公布时间表废弃宽容路径,而非默默永远兼容怪癖。
经典案例
该原则的制度锚点是文本:RFC 793(1981)把 TCP 的健壮性指引写进必须共存的厂商实现——可引用的 RFC 编号与年份,而非实验室指标。后续工程讨论(包括 2000–2020 年代 ACM Queue / Communications of the ACM 等)反思宽容是否固化了互通 bug——指标是争论从「能否连上」转向「安全不变量在宽容默认时是否成立」。边界与失效场景
边界 1:安全打破天真宽容攻击者会在解析器「猜意图」之处构造歧义输入。 边界 2:标准已成熟
现代协议常偏好显式失败,而非静默修复。 常见误用:无限宽容且无遥测——怪癖成删不掉的遗产。
常见误区
把慷慨与放任分开。误区:要友好就全收
误区:要友好就全收
实情:宽容解析仍拒绝非法状态;善意受安全与规范意图约束。
误区:波斯特尔禁止严格校验
误区:波斯特尔禁止严格校验
实情:保守发送常与分层校验配对(语法/语义)。
误区:已过时
误区:已过时
实情:权衡演变;生态仍需互通之处仍有其影子。
相关概念
在兼容与正确之间取舍时一并阅读。康威定律
系统结构映射沟通结构——协调定义了「兼容」的含义。
布鲁克斯定律
加人增沟通成本——修复遗产怪癖也耗时间。
墨菲定律
可能出错终会出错——校验要据此设计。