類別:定律
類型:網路/系統互操作性原則
來源:喬恩·波斯特爾;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:標準已成熟
現代協定常偏好顯式失敗,而非靜默修復。 常見誤用:無限寬容且無遙測——怪癖成刪不掉的遺產。
常見誤區
把慷慨與放任分開。誤區:要友好就全收
誤區:要友好就全收
實情:寬容解析仍拒絕非法狀態;善意受安全與規範意圖約束。
誤區:波斯特爾禁止嚴格校驗
誤區:波斯特爾禁止嚴格校驗
實情:保守發送常與分層校驗配對(語法/語意)。
誤區:已過時
誤區:已過時
實情:權衡演變;生態仍需互通之處仍有其影。
相關概念
在相容與正確之間取捨時一併閱讀。康威定律
系統結構映射溝通結構——協調定義了「相容」的意義。
布魯克斯定律
加人增溝通成本——修復遺產怪癖也耗時間。
墨菲定律
可能出錯終會出錯——校驗要據此設計。