第19章 发布系统
在历史边界内掌握FrontPage RPC与WebDAV协作发布、锁、属性、集合和方法扩展
第19章 发布系统
“第19章 发布系统”锁定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个部分、章、编号节/小节、附录与索引节点。
“第19章 发布系统”未取得未获授权的完整中文正文;课程以 O’Reilly 官方在线版 与 章级导览 界定首版范围,中文解释、报文、实验和练习均为独立教学重写。现代语义仅以 RFC 9110、RFC 9111 和 RFC 9112 核对差异。
学习目标
- 能解释“第19章 发布系统”的全部正式节点及其HTTP事务位置。
- 能绘制请求、响应、TCP连接、中间实体和资源状态。
- 能设计单变量实验,验证“发布操作能说明资源URI、前置条件、锁令牌、属性、覆盖规则和失败原子性”。
- 能写出含首版边界、原始报文、故障、恢复和复核人的证据包。
从一条可证伪的HTTP事务开始
先预测:把LOCK当永久互斥或忽略Depth与Overwrite会破坏协作编辑。把预测写成“URL/资源、连接、请求报文、中间实体、响应报文、身份与编码”六行,再运行客户端、代理或服务器。结果不同先定位首个字节或状态偏差。
本页主问题是:在历史边界内掌握FrontPage RPC与WebDAV协作发布、锁、属性、集合和方法扩展。每条消息要注明发送者、接收者、HTTP版本、连接复用、逐跳/端到端首部、主体边界与历史协议状态。
验收不变量是:发布操作能说明资源URI、前置条件、锁令牌、属性、覆盖规则和失败原子性。最终页面正常、状态码200或TLS通道建立都只是局部事实,不能单独证明资源身份、缓存变体、代理转发与证书身份全部正确。
核心词汇与首版边界
↡以HTTP扩展方法和首部支持远程协作创作与资源管理的协议、↡为资源创建写锁并返回锁令牌的WebDAV方法、↡查询资源属性和集合成员信息的WebDAV方法、↡创建集合资源的WebDAV方法、↡FrontPage服务器扩展使用的历史远程发布协议
这些词汇固定在2002年英文首版和2012年中译本语境。在“第19章 发布系统”中,HTTP/2、HTTP/3、OAuth、JWT、SameSite、HSTS和现代CDN行为只作独立比较,不得替换HTTP-NG、Digest、WebDAV、WPAD等首版节点。
核心机制深读
先从WebDAV画出事务
在历史边界内掌握FrontPage RPC与WebDAV协作发布、锁、属性、集合和方法扩展。先固定资源身份和请求目标,再标出客户端、中间实体与源服务器,任何优化或安全结论都不能跳过原始报文。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
区分WebDAV与LOCK
WebDAV和LOCK可能在同一事务中协作,但责任、状态位置和失败语义不同。对比正常请求、单个首部变化和单个连接故障,定位首个偏差。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
让PROPFIND经过真实中间实体
代理、缓存、网关或隧道会读取、添加、删除或转发不同首部。逐跳记录Via、Connection列出的字段、缓存决策和认证边界。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
验证MKCOL的历史语境
原书写于2002年,以HTTP/1.0、HTTP/1.1、SSL/TLS早期版本和当时Web基础设施为背景。现代实现可做对照,但不能冒充原书节点。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
用FrontPage RPC关闭证据门
发布操作能说明资源URI、前置条件、锁令牌、属性、覆盖规则和失败原子性。证据至少包含原始请求/响应、TCP时间线、中间状态、失败注入、恢复动作和第三方复核。
动手试:先手写预期请求与响应,再抓取正常事务和一个单变量故障事务。标出首个不同字节或状态,不用最终页面猜根因。
首版机制逐项深读
第19章 发布系统
“第19章 发布系统”把请求路由到具体站点与版本:Host/地址决定虚拟主机,权限与写入协议控制发布,副本和分发节点必须保持资源身份与版本一致。
19.1 frontpage 为支持发布而做的服务器扩展
“19.1 frontpage 为支持发布而做的服务器扩展”的失败应归到接收、解析、映射、授权、执行或发送中的首个异常阶段;后续 500 响应只是结果,不是根因。
19.1.1 frontpage 服务器扩展
验证“19.1.1 frontpage 服务器扩展”固定 URL 与身份,只改变一项映射或权限配置,比较服务器选择的资源、状态码和日志责任字段。
19.1.2 frontpage 术语表
“19.1.2 frontpage 术语表”的故障常来自错误变体键、过期算法或共享与私有策略混用;证据包必须包含缓存日志和源站条件请求。
19.1.3 frontpage 的rpc 协议
验证“19.1.3 frontpage 的rpc 协议”固定响应字节与缓存键,只改变 Age、寿命或验证器中的一个量,观察新鲜命中、304 再验证和完整回源。
19.1.4 frontpage 的安全模型
验证“19.1.4 frontpage 的安全模型”固定响应字节与缓存键,只改变 Age、寿命或验证器中的一个量,观察新鲜命中、304 再验证和完整回源。
19.2 webdav 与协作写作
“19.2 webdav 与协作写作”把请求路由到具体站点与版本:Host/地址决定虚拟主机,权限与写入协议控制发布,副本和分发节点必须保持资源身份与版本一致。
19.2.1 webdav 的方法
“19.2.1 webdav 的方法”必须在线路语义中判断:请求方法声明意图,状态码表达处理结果,首部携带元数据,主体边界由明确的报文规则确定。
19.2.2 webdav 与xml
“19.2.2 webdav 与xml”把请求路由到具体站点与版本:Host/地址决定虚拟主机,权限与写入协议控制发布,副本和分发节点必须保持资源身份与版本一致。
19.2.3 webdav 首部集
“19.2.3 webdav 首部集”必须在线路语义中判断:请求方法声明意图,状态码表达处理结果,首部携带元数据,主体边界由明确的报文规则确定。
19.2.4 webdav 的锁定与防止覆写
“19.2.4 webdav 的锁定与防止覆写”用锁令牌协调 WebDAV 并发写入;客户端修改或释放资源时必须提交正确令牌,且锁不能替代版本与权限检查。
19.2.5 lock 方法
“19.2.5 lock 方法”用锁令牌协调 WebDAV 并发写入;客户端修改或释放资源时必须提交正确令牌,且锁不能替代版本与权限检查。
19.2.6 unlock 方法
“19.2.6 unlock 方法”用锁令牌协调 WebDAV 并发写入;客户端修改或释放资源时必须提交正确令牌,且锁不能替代版本与权限检查。
19.2.7 属性和元数据
“19.2.7 属性和元数据”在本章用于回答“在历史边界内掌握FrontPage RPC与WebDAV协作发布、锁、属性、集合和方法扩展”。学习时必须把这个名称落到具体报文、连接、中间状态或历史规范,并说明它改变了哪项可观察结果。
19.2.8 propfind 方法
“19.2.8 propfind 方法”读取或更新 WebDAV 资源属性;属性与实体内容分离,服务器需按资源层级和权限返回多状态结果。
19.2.9 proppatch 方法
“19.2.9 proppatch 方法”读取或更新 WebDAV 资源属性;属性与实体内容分离,服务器需按资源层级和权限返回多状态结果。
19.2.10 集合与名字空间管理
验证“19.2.10 集合与名字空间管理”用同一文本的两种编码或语言表示,改变一个 Accept 或 Content 元数据并检查协商、缓存变体与显示结果。
19.2.11 mkcol 方法
“19.2.11 mkcol 方法”操作 WebDAV 集合或资源命名关系;Destination、覆盖策略、深度和权限共同决定结果,不能只看最终 URL。
19.2.12 delete 方法
“19.2.12 delete 方法”请求删除目标 URI 与当前资源的关联;响应成功也不保证底层存储字节被物理擦除。
19.2.13 copy 与move 方法
“19.2.13 copy 与move 方法”操作 WebDAV 集合或资源命名关系;Destination、覆盖策略、深度和权限共同决定结果,不能只看最终 URL。
19.2.14 增强的http/1.1 方法
“19.2.14 增强的http/1.1 方法”由发送者意图与接收者结果共同决定;状态成功并不能证明方法安全、幂等或表示完整。
19.2.15 webdav 中的版本管理
“19.2.15 webdav 中的版本管理”把请求路由到具体站点与版本:Host/地址决定虚拟主机,权限与写入协议控制发布,副本和分发节点必须保持资源身份与版本一致。
19.2.16 webdav 的未来发展
“19.2.16 webdav 的未来发展”把请求路由到具体站点与版本:Host/地址决定虚拟主机,权限与写入协议控制发布,副本和分发节点必须保持资源身份与版本一致。
19.3 更多信息
“19.3 更多信息”是原书的延伸资料入口,不增加新的协议结论;使用时必须记录资料版本、适用的 HTTP 年代和与本章结论的对应关系。
复原原始HTTP事务
固定URL、资源、连接与版本,写出请求行、首部、主体、响应和所有中间实体。
HTTP/1.1 message laboratory
第19章 发布系统
在历史边界内掌握FrontPage RPC与WebDAV协作发布、锁、属性、集合和方法扩展
GET /resource?chapter=%E7%AC%AC19%E7%AB%A0%20%E5%8F%91%E5%B8%83%E7%B3%BB%E7%BB%9F HTTP/1.1 Host: example.test Connection: keep-alive
章内坐标:第19章 发布系统、19.1 frontpage 为支持发布而做的服务器扩展、19.1.1 frontpage 服务器扩展、19.1.2 frontpage 术语表、19.1.3 frontpage 的rpc 协议、19.1.4 frontpage 的安全模型、19.2 webdav 与协作写作、19.2.1 webdav 的方法
可复现实验记录
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:为什么“第19章 发布系统”必须固定2002年首版?
问题 2:怎样构造“把LOCK当永久互斥或忽略Depth与Overwrite会破坏协作编辑”的最小反例?
问题 3:何时可以认为本页完成独立交接?
本章回顾
“第19章 发布系统”的核心是在历史边界内掌握FrontPage RPC与WebDAV协作发布、锁、属性、集合和方法扩展。真正掌握不是记首部名,而是能用原始报文、连接和中间状态证明资源如何被定位、传输、缓存、保护与交付。
名词解释
本章出现的专业名词,用大白话再讲一遍。
- WebDAV
以HTTP扩展方法和首部支持远程协作创作与资源管理的协议。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。
- LOCK
为资源创建写锁并返回锁令牌的WebDAV方法。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。
- PROPFIND
查询资源属性和集合成员信息的WebDAV方法。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。
- MKCOL
创建集合资源的WebDAV方法。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。
- FrontPage RPC
FrontPage服务器扩展使用的历史远程发布协议。掌握标准是能在原始HTTP报文、中间状态或历史规范中定位,并构造最小失败反例。