You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chrome请求带相同ETag返回200 OK但curl请求返回304 Not Modified问题求助

问题排查方向与解决方案

  • 检查浏览器开发者工具「网络」面板是否勾选了禁用缓存选项,该选项开启时浏览器会自动在请求头携带Cache-Control: no-cache,Spring的ShallowEtagHeaderFilter收到该头会跳过304校验逻辑,直接返回200。
  • 核对浏览器实际发出的请求头中是否包含If-None-Match字段,值是否与前一次响应返回的ETag完全一致:
    • 若缺失该字段,首先检查跨域配置:由于你开启了withCredentials: true,需确认服务端CORS配置的Access-Control-Allow-Headers列表包含If-None-Match,否则跨域请求时浏览器会自动屏蔽该请求头,导致服务端无法做ETag校验。
    • 若跨域配置无问题,是因为Axios默认不会自动处理ETag缓存逻辑,你可以选择两种方案处理:
      1. 在Axios响应拦截器中存储每个请求URL对应的ETag值,在请求拦截器中为对应请求主动添加If-None-Match头
      2. 服务端给响应添加Cache-Control: public, max-age=0头,告知浏览器自动处理缓存校验,自动在后续请求携带If-None-Match头
  • 确认当前请求为GET方法:ShallowEtagHeaderFilter默认仅对GET请求、且响应状态码为200的请求生成ETag并做校验,其他请求方法默认不生效。
  • 确认响应头未返回Cache-Control: no-store:该配置会禁用所有缓存逻辑,ETag校验也不会生效。

内容的提问来源于stack exchange,提问作者wanglong

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 00:15:09