Chrome etag 总是显示 200 ok 但 curl 得到 304 未修改

Posted

技术标签:

【中文标题】Chrome etag 总是显示 200 ok 但 curl 得到 304 未修改【英文标题】:Chrome etag always show 200 ok but curl get the 304 not modified 【发布时间】:2022-01-06 22:21:23 【问题描述】:

有两张图片,第一张是在浏览器中发送请求,etag 值始终相同,http 状态始终为 200 ok,基于 http etag stretegy,我会得到此请求中未修改的 304。然后让我怀疑的是,当我将请求复制为 curl 在 bash 中运行时,它起作用了,服务器返回正确 304 未修改。

我的服务器端是Spring Boot,相关代码是

  @Bean
  fun shallowEtagHeaderFilter(): ShallowEtagHeaderFilter? 
    return ShallowEtagHeaderFilter()
  

前端是和axios反应,相关代码是:

import axios from "axios";

const request = axios.create( 
  baseURL: 'http://localhost:8082',
  timeout: 10000,
  withCredentials: true
)

export default request

在线等待您的回复,感谢您的阅读。

【问题讨论】:

【参考方案1】:

点击Response Headers部分的View source按钮,可能会看到HTTP/1.1 304 Not Modified。

我不知道为什么 Chrome 在 General 部分显示状态码 200。

类似问题:Why Chrome Dev Tool shows a 200 status code instead of 304

我在 Firefox 中尝试了我的代码,状态码是 304。

【讨论】:

以上是关于Chrome etag 总是显示 200 ok 但 curl 得到 304 未修改的主要内容,如果未能解决你的问题,请参考以下文章

IE9收到ETag后伪造304

使用“If-None-Match”获取:“etag”标头在 React Native 应用程序中始终返回 200

AEM Dispatcher (4.3.3) 总是返回 200 而不是 304 (Apache 2.4.6)

apache 2.4.9 http响应头信息不显示etag, 刷新相同页面后,状态码一直显示200(from memory cache)

具有标题和数据的POST请求导致200 ok响应但未添加用户

浅谈浏览器的缓存机制