Chrome缓存指定端口所有API端点,本地修改后响应未更新求助
本地API服务器修改后响应未更新的排查与解决
核心结论
这不是Chrome的新特性,Chrome和Chromium的缓存逻辑基本一致,切换浏览器无法解决问题。核心原因是过度缓存,涉及浏览器端或服务器端的缓存配置问题。
排查与解决步骤
1. 检查并修正服务器端缓存配置
- 确认API响应头是否包含强缓存规则:查看请求响应头中的
Cache-Control、Expires字段,如果返回Cache-Control: public, max-age=xxx这类设置,浏览器会优先使用本地缓存。需要在后端代码中全局添加禁用缓存的响应头:- 示例(FastAPI中间件):
from fastapi import FastAPI, Request, Response app = FastAPI() @app.middleware("http") async def disable_cache(request: Request, call_next): response = await call_next(request) response.headers["Cache-Control"] = "no-cache, no-store, must-revalidate" response.headers["Pragma"] = "no-cache" response.headers["Expires"] = "0" return response
- 示例(FastAPI中间件):
- 检查服务器是否启用了内部缓存:部分后端框架、插件或本地反向代理(如Nginx)会默认开启响应缓存,需手动关闭这类配置。
2. 浏览器端缓存彻底清除
- 调试时打开Chrome DevTools的Network面板,勾选顶部的
Disable cache选项,保持DevTools开启状态下请求API,浏览器会完全跳过本地缓存。 - 若强制刷新(Ctrl+Shift+R / Cmd+Shift+R)无效,可手动清除对应站点缓存:Chrome设置→隐私和安全→清除浏览数据→选择“缓存的图片和文件”,时间范围选“过去一小时”后执行清除。
3. Swagger文档未更新的处理
- Swagger文档若为静态文件,可能被浏览器或服务器缓存:需在服务器配置中给Swagger相关资源添加禁用缓存的响应头,或重启服务器加载新生成的文档文件。
- 部分Swagger实现会将文档存于内存,仅重新生成文件无法生效,必须重启服务器让新文档加载到内存中。
4. 不同端口缓存差异的原因
- 浏览器按「协议+域名+端口」区分缓存空间,9892端口存在未过期的旧缓存,因此刷新无变化;9893为新端口,无历史缓存,所以能显示修改后的内容,这进一步验证了缓存问题。
5. 避免频繁更换端口的方案
- 确保服务器开启热重载:使用框架自带的热重载功能(如FastAPI用
uvicorn main:app --reload),修改代码后服务器自动重启加载新逻辑。 - 全局配置禁用缓存响应头:如步骤1所述,从根源上避免浏览器缓存API响应。
内容的提问来源于stack exchange,提问作者Micheal J. Roberts
相关产品推荐
相关产品推荐

