# Replit Agent HTTP缓存：用 ETag 返回304，并让中英文版本各自更新

真实HTTP核对双语ETag、Vary与304空正文；只更新中文时英文表示仍有效。

## 环境



## 启动

~~~sh
cd reference
python3 server.py --port 8787
~~~

## 七步操作

1. 准备双语表示

本机HTTP服务提供中文与英文两个文章表示。每种语言有独立版本号和ETag，响应明确Vary: Accept-Language，输入是原创练习文本。

2. 发送首次请求

首次请求中文得到200和正文，保存该语言的ETag。缓存键至少包含语言表示，不能用单一article地址覆盖所有语言。

3. 携带条件头

再次请求中文时带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行为未验证。

## 目录身份

- starter：待完成的任务接口与原创输入，TODO不是已完成实现。
- reference：作者原生完成参考和实际产物。records.json/browser-result.json为本地实测记录，不是AI助手回复。
- TASK.md：可交给相应AI助手的原始任务合同。该助手账号生成会话未运行。

## 依赖与许可

原创教学代码以MIT许可提供。第三方项目、模型及浏览器遵循其自身许可。第三方依赖由本地安装获取，不包含node_modules、模型权重、WASM运行时、数据库、缓存或凭据。

## 官方依据

- https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/ETag
