---
source_url: 
ingested: 2026-08-03
status: inbox
---

# 坑：iOS Safari 启发式缓存导致"修了看不见"（1.0.419，2026-08-03）

## 现象
tags/technology 页面移动端 broken，大哥**连报两次"没修好"**（含 tall mobile Safari 截图），但服务器侧验证页面完全正常（渲染 48ms、20 卡 + View all 链接）。

## 根因
HTML 响应**没有任何 Cache-Control 头**时，iOS Safari 会"启发式缓存"（heuristic caching）——部署新代码后手机继续用旧页面（用户看到的是 1.0.417 之前的 511 卡旧 HTML）。

## 修复
`core/middleware.py` 新增 **`NoCacheUiPagesMiddleware`**：所有 `/ui/*` HTML 响应强制 `Cache-Control: no-cache, no-store, must-revalidate` + Pragma + Expires（API 不受影响）。1.0.419 上线并生产验证。

## 排查套路（以后先查缓存再查代码）
1. pod 内 curl 看响应头：`kubectl exec -n apps deploy/links -c links -- sh -c 'curl -s -D - -o /dev/null http://localhost:8000/ui/.../ | grep -i cache-control'`
2. pod 内 curl 拿 HTML，正则提取卡片数对比是否新代码
3. 让用户硬刷新（Safari 长按刷新按钮 → 清除网站数据，或设置里清历史记录与网站数据）

教训：移动端"部署后没变化"类 bug，先排除浏览器缓存，再做代码排查。顺带加了防御性 CSS（`width:100%; box-sizing:border-box`）保证移动端全宽对齐。
