展开本页目录
开始前准备什么
- 下载本题完整练习包,区分待实现 starter 与作者完成 reference。
- 按README准备本题原生依赖;所有输入均为原创或明确标注的本地fixture。
- 本地练习不需要付费模型Key;真实模型调用未执行,MiniLM题另有明确实际推理说明。
- 准备双语表示
- 发送首次请求
- 携带条件头
- 更新中文版本
- 观察错误缓存键
- 核对304空正文
- 保留请求记录
原创输入、待完成starter、作者reference及实际运行产物,依README本地准备依赖。
环境要求、具体操作、产物核对与未运行范围。
1. 准备双语表示
本机HTTP服务提供中文与英文两个文章表示。每种语言有独立版本号和ETag,响应明确Vary: Accept-Language,输入是原创练习文本。
2. 发送首次请求
首次请求中文得到200和正文,保存该语言的ETag。缓存键至少包含语言表示,不能用单一article地址覆盖所有语言。
本地启动与复现
cd reference
python3 server.py --port 87873. 携带条件头
再次请求中文时带If-None-Match,版本未变返回304。练习使用no-store读取真实响应,核对正文长度为0,不把浏览器自动复用后的200混入结果。
4. 更新中文版本
只更新中文,再分别请求两种语言。中文ETag变化并得到新正文,英文ETag保持原值并返回304,两条表示不能互相失效。
5. 观察错误缓存键
点击错误共享缓存对照,展示把中文缓存交给英文请求的错误结果。这个反例来自故意省略语言键,修复应依据Vary建立独立缓存。
6. 核对304空正文
读取表里的状态、发送ETag、返回ETag、正文bytes与Vary。304节省的是正文传输,它仍有请求与响应头,并不代表完全没有网络流量。
7. 保留请求记录
下载服务与浏览器源码,按相同顺序复跑。作者本地HTTP链路已执行;Replit Agent账号生成、反向代理和CDN行为未验证。
怎样确认已经完成
- 真实HTTP核对双语ETag、Vary与304空正文;只更新中文时英文表示仍有效。
- 首次保存该表示的ETag,再发If-None-Match;未变时服务端304正文为空。请求头和响应头仍有开销。
- 通常是缓存键忽略了语言表示。响应Vary: Accept-Language,缓存也要按语言隔离,本题错误共享键可复现串语言。
常见问题
页面没变为什么每次还要重新下载一遍?
首次保存该表示的ETag,再发If-None-Match;未变时服务端304正文为空。请求头和响应头仍有开销。
加了缓存之后,中文用户怎么会看到英文内容?
通常是缓存键忽略了语言表示。响应Vary: Accept-Language,缓存也要按语言隔离,本题错误共享键可复现串语言。
哪些部分实际运行,哪些需要独立验证?
真实HTTP核对双语ETag、Vary与304空正文;只更新中文时英文表示仍有效。 目标AI助手账号生成、云平台部署和生产环境不在本次执行范围。




