fix(cache): 列表/分类请求禁用客户端缓存,根治新应用上架后搜不到

- C1: 主进程 onBeforeSendHeaders 对 .json 数据请求注入 Cache-Control: no-cache + Pragma
- C2: 渲染端 axiosInstance 与 priorityConfigAxios 对 .json GET 追加 ?_t 时间戳版本戳,穿透 CDN 边缘缓存
- 按去除 query 的 pathname 判断 .json,兼容 C2 自身追加的 ?_t,避免 C1/C2 交互失效
- 根因: nginx 无 Cache-Control 头 -> Chromium 启发式缓存(≈(now-LastModified)/10) 复用陈旧副本,重启仍命中旧 JSON,仅删 Cache 目录才生效
This commit is contained in:
xiyidaiwa
2026-08-11 18:44:32 +08:00
parent 8888afd4f5
commit e0e6c50b89
3 changed files with 38 additions and 0 deletions
+9
View File
@@ -652,6 +652,15 @@ app.whenReady().then(() => {
// Set User-Agent for client
session.defaultSession.webRequest.onBeforeSendHeaders((details, callback) => {
details.requestHeaders["User-Agent"] = getUserAgent();
// 数据 JSONapplist / categories / priority-config / sidebar-config 等)禁用客户端缓存。
// nginx 默认不发 Cache-ControlChromium 会按启发式 TTL(≈(now-LastModified)/10)复用陈旧副本,
// 导致服务端上新应用后商店内仍搜不到、且重启无效(仅删 Cache 目录才生效)。
// 注意:C2 会给 URL 追加 ?_t=... 版本戳,故需按 query 前的 pathname 判断,而非 endsWith(".json")。
const dataUrlPath = details.url.split("?")[0];
if (dataUrlPath.endsWith(".json")) {
details.requestHeaders["Cache-Control"] = "no-cache";
details.requestHeaders["Pragma"] = "no-cache";
}
callback({ cancel: false, requestHeaders: details.requestHeaders });
});
createWindow();