第 5 章 部署
用审查、队列、权限、不可变静态资源和HTTP缓存完成安全部署;用体系节点、故障轨迹和发布门完成独立复核。
学习目标
- 能说明“第 5 章 部署”如何用审查、队列、权限、不可变静态资源和HTTP缓存完成安全部署,并保持2018原书目录与现代技术对照的边界
- 能先预测“怎样让HTML引用新资源、旧资源继续可用,并在出错时只切换入口而不是覆盖文件?”的正常路径,再沿输入、动作、产物和责任逐阶段核对
- 能注入“在同一URL覆盖静态文件并设置长期强缓存,导致用户拿到版本混合页面”,用“内容地址化资源不可变,发布动作有授权、审查、原子入口与回滚记录”决定接受、缩小或拒绝交付
为什么从这个交付任务开始
部署页把速度、协作和安全落实为可审计状态变化;长期缓存只适合内容地址化的不可变资源,HTML入口需要能够及时发现新版本。 “第 5 章 部署”使用的贯穿任务是:团队把带内容哈希的JS/CSS上传对象存储,再更新HTML入口;一次越权发布需要在数分钟内审计和回滚。 操作前先预测哪个阶段最先产生差异,运行后再补解释不算预测。
本页围绕“怎样让HTML引用新资源、旧资源继续可用,并在出错时只切换入口而不是覆盖文件?”建立正常、故障与恢复路径。只有“第 5 章 部署”保持“内容地址化资源不可变,发布动作有授权、审查、原子入口与回滚记录”并交付审批者、构建产物ID、资源哈希、缓存策略、上传校验、入口版本、发布时间和回滚目标。,工具运行结果才构成工程证据。
书目、98条目与时代边界
“第 5 章 部署”以豆瓣书目与完整目录核对周俊鹏著、电子工业出版社、2018年1月、224页、ISBN 9787121330902和七章结构;天瓏书店目录为“第 5 章 部署”提供第二份逐节顺序核对。公开材料合计列出98个章、节和小节层级条目,课程不把现代对照增列为原书章节。
“第 5 章 部署”当前只能取得书目简介与详细目录,没有可授权逐段改写的完整正文。本页的解释、架构、交互、练习和答案均为独立教学重写;webpack、Yeoman、Node.js等名称按2018目录定位,现代文档不反向证明原书当年的具体版本行为。
“第 5 章 部署”另以技术核对 1、技术核对 2核对技术事实。对本页而言,Node、webpack、Babel、PostCSS、Git或WebHook文档说明当前机制;2022年的RFC 9111是HTTP缓存的现代标准,不能冒充2018年原书引用的历史规范。现代Vite、Module Federation、TypeScript测试体系或RUM若出现,只能标为迁移讨论,不能改写98条目分母。
公开目录条目与工程机制
第5章 部署
↡部署对应目录条目“第5章 部署”,在“第 5 章 部署”中用于封闭该章职责与证据,并受版本、产物与责任边界约束。公开坐标 1/9。 在“第 5 章 部署”的条目1中,第5章 部署用于封闭该章职责与证据;先声明工程输入与责任人,再用正式条目和相邻章节复核产物,出现跨章任意混排时不能继续交付。
5.1 部署流程的设计原则
↡部署流程的设计原则对应目录条目“5.1 部署流程的设计原则”,在“第 5 章 部署”中用于由依赖图编排工程能力,并受版本、产物与责任边界约束。公开坐标 2/9。 5.1 部署流程的设计原则进入“第 5 章 部署”后要回答第2张证据卡:它怎样由依赖图编排工程能力、向下一阶段交付什么、由哪些入口、模块、产物和边界证明,并怎样排除打包器包办所有职责。
5.1.1 速度——化繁为简
↡速度对应目录条目“5.1.1 速度——化繁为简”,在“第 5 章 部署”中用于把发布设计成有门的状态机,并受版本、产物与责任边界约束。公开坐标 3/9。 围绕“怎样让HTML引用新资源、旧资源继续可用,并在出错时只切换入口而不是覆盖文件?”,坐标3把5.1.1 速度——化繁为简解释为把发布设计成有门的状态机;独立复核者先读取审批、队列和权限日志再判断工程状态,不能接受速度绕过审查这种捷径。
5.1.2 协作——代码审查和部署队列
↡协作对应目录条目“5.1.2 协作——代码审查和部署队列”,在“第 5 章 部署”中用于把发布设计成有门的状态机,并受版本、产物与责任边界约束。公开坐标 4/9。 对“第 5 章 部署”而言,5.1.2 协作——代码审查和部署队列的最小合同是把发布设计成有门的状态机,第4次检查保存审批、队列和权限日志;若产生速度绕过审查,就回到上游版本和契约重新验证。
5.1.3 安全——严格审查和权限控制
↡安全对应目录条目“5.1.3 安全——严格审查和权限控制”,在“第 5 章 部署”中用于把发布设计成有门的状态机,并受版本、产物与责任边界约束。公开坐标 5/9。 第5个公开条目5.1.3 安全——严格审查和权限控制服务于用审查、队列、权限、不可变静态资源和HTTP缓存完成安全部署,需要以审批、队列和权限日志呈现把发布设计成有门的状态机;速度绕过审查会破坏“内容地址化资源不可变,发布动作有授权、审查、原子入口与回滚记录”,因此属于拒绝条件。
5.2 流程之外:前端静态资源的部署策略
↡流程之外对应目录条目“5.2 流程之外:前端静态资源的部署策略”,在“第 5 章 部署”中用于协调不可变资源与可更新入口,并受版本、产物与责任边界约束。公开坐标 6/9。 学习者在“第 5 章 部署”中讨论5.2 流程之外:前端静态资源的部署策略前预测协调不可变资源与可更新入口会改变哪项工程状态,再读取缓存键、指令和回滚;观察到覆盖同名长期缓存时必须恢复已知产物,不能移动验收标准。
5.2.1 协商缓存与强制缓存
↡协商缓存与强制缓存对应目录条目“5.2.1 协商缓存与强制缓存”,在“第 5 章 部署”中用于让内容变化驱动标识和失效,并受版本、产物与责任边界约束。公开坐标 7/9。 团队把带内容哈希的JS/CSS上传对象存储,再更新HTML入口;一次越权发布需要在数分钟内审计和回滚。 在条目7处理5.2.1 协商缓存与强制缓存时,要把让内容变化驱动标识和失效写进流水线,把内容哈希、缓存头和清单写进运行记录,并把同URL覆盖长期缓存写进失败样本。
5.2.2 Apache设置缓存策略
↡Apache设置缓存策略对应目录条目“5.2.2 Apache设置缓存策略”,在“第 5 章 部署”中用于让内容变化驱动标识和失效,并受版本、产物与责任边界约束。公开坐标 8/9。 “内容地址化资源不可变,发布动作有授权、审查、原子入口与回滚记录”限定了5.2.2 Apache设置缓存策略的适用域:条目8只能通过让内容变化驱动标识和失效推进交付,由内容哈希、缓存头和清单复核,而同URL覆盖长期缓存构成反事实检查。
5.3 总结
↡总结对应目录条目“5.3 总结”,在“第 5 章 部署”中用于封闭该章职责与证据,并受版本、产物与责任边界约束。公开坐标 9/9。 在“第 5 章 部署”的条目9中,5.3 总结用于封闭该章职责与证据;先声明工程输入与责任人,再用正式条目和相邻章节复核产物,出现跨章任意混排时不能继续交付。
先预测,再操作三个工程实验
1. 体系节点与交付契约
逐个选择“变更审查、部署队列、权限门、静态资源、缓存与入口”,核对输入、动作、输出和门禁怎样连接“第 5 章 部署”。
体系节点
从版本化输入走到可晋级产物
怎样让HTML引用新资源、旧资源继续可用,并在出错时只切换入口而不是覆盖文件?
版本化输入
“第 5 章 部署”的变更审查读取已版本化需求、模板或源码。
工程动作
按审查并排队发布处理变更审查,不得读取未声明的可变输入。
可验证输出
变更审查输出带版本、哈希或运行ID的工程证据,供下一节点验证。
晋级门
若发生“在同一URL覆盖静态文件并设置长期强缓存,导致用户拿到版本混合页面”,变更审查必须停止而非越过“内容地址化资源不可变,发布动作有授权、审查、原子入口与回滚记录”。
公开目录坐标:第5章 部署、5.1 部署流程的设计原则、5.1.1 速度——化繁为简、5.1.2 协作——代码审查和部署队列、5.1.3 安全——严格审查和权限控制、5.2 流程之外:前端静态资源的部署策略、5.2.1 协商缓存与强制缓存、5.2.2 Apache设置缓存策略、5.3 总结
第 5 章 部署的可重放交付协议
| 阶段 | 工程动作 | 必留证据 | 拒绝条件 |
|---|---|---|---|
| 审查并排队发布 | 按审查并排队发布处理变更审查,不得读取未声明的可变输入。 | 提交、依赖、模板与配置版本 | 输入版本不完整 |
| 上传验证不可变资源 | 按上传验证不可变资源处理部署队列,不得读取未声明的可变输入。 | 运行ID、测试、清单与产物哈希 | 在同一URL覆盖静态文件并设置长期强缓存,导致用户拿到版本混合页面 |
| 原子切换入口与回滚 | 按原子切换入口与回滚处理权限门,不得读取未声明的可变输入。 | 审批、环境、入口与回滚目标 | 无法返回已验证产物 |
unit: "feng-unit-05"
question: "怎样让HTML引用新资源、旧资源继续可用,并在出错时只切换入口而不是覆盖文件?"
scenario: "团队把带内容哈希的JS/CSS上传对象存储,再更新HTML入口;一次越权发布需要在数分钟内审计和回滚。"
nodes: ["变更审查", "部署队列", "权限门", "静态资源", "缓存与入口"]
stages: ["审查并排队发布", "上传验证不可变资源", "原子切换入口与回滚"]
invariant: "内容地址化资源不可变,发布动作有授权、审查、原子入口与回滚记录"
fault: "在同一URL覆盖静态文件并设置长期强缓存,导致用户拿到版本混合页面"
evidence: "审批者、构建产物ID、资源哈希、缓存策略、上传校验、入口版本、发布时间和回滚目标。"
reset: restore_node_mode_step_gates_and_artifact该协议要求“第 5 章 部署”在相同提交、依赖锁、配置和外部服务下重放。重置后若节点、执行位置或发布门没有回到基线,交互状态已经污染比较,不能作为工程证据。
本页回顾
掌握“第 5 章 部署”不是记住工具命令,而是能围绕“怎样让HTML引用新资源、旧资源继续可用,并在出错时只切换入口而不是覆盖文件?”重建工程状态,并用“内容地址化资源不可变,发布动作有授权、审查、原子入口与回滚记录”拒绝“在同一URL覆盖静态文件并设置长期强缓存,导致用户拿到版本混合页面”。最终交付为审批者、构建产物ID、资源哈希、缓存策略、上传校验、入口版本、发布时间和回滚目标。
练习与答案
练习
- 问题 1:工程合同。 “第 5 章 部署”为什么必须先声明提交、依赖、配置与责任边界?
- 问题 2:目录逐项覆盖。 怎样证明公开条目已经进入机制、交互和练习?
- 问题 3:故障恢复。 怎样证明“在同一URL覆盖静态文件并设置长期强缓存,导致用户拿到版本混合页面”已经被修正?
名词解释
名词解释
本章出现的专业名词,用大白话再讲一遍。
- 部署
对应“第5章 部署”;在“第 5 章 部署”中用于封闭该章职责与证据,需要连接输入、产物、版本与责任。
- 部署流程的设计原则
对应“5.1 部署流程的设计原则”;在“第 5 章 部署”中用于由依赖图编排工程能力,需要连接输入、产物、版本与责任。
- 速度
对应“5.1.1 速度——化繁为简”;在“第 5 章 部署”中用于把发布设计成有门的状态机,需要连接输入、产物、版本与责任。
- 协作
对应“5.1.2 协作——代码审查和部署队列”;在“第 5 章 部署”中用于把发布设计成有门的状态机,需要连接输入、产物、版本与责任。
- 安全
对应“5.1.3 安全——严格审查和权限控制”;在“第 5 章 部署”中用于把发布设计成有门的状态机,需要连接输入、产物、版本与责任。
- 流程之外
对应“5.2 流程之外:前端静态资源的部署策略”;在“第 5 章 部署”中用于协调不可变资源与可更新入口,需要连接输入、产物、版本与责任。
- 协商缓存与强制缓存
对应“5.2.1 协商缓存与强制缓存”;在“第 5 章 部署”中用于让内容变化驱动标识和失效,需要连接输入、产物、版本与责任。
- Apache设置缓存策略
对应“5.2.2 Apache设置缓存策略”;在“第 5 章 部署”中用于让内容变化驱动标识和失效,需要连接输入、产物、版本与责任。
- 总结
对应“5.3 总结”;在“第 5 章 部署”中用于封闭该章职责与证据,需要连接输入、产物、版本与责任。