Fetch API 和 Axios 是不是将 304 响应视为 200?

Posted

技术标签:

【中文标题】Fetch API 和 Axios 是不是将 304 响应视为 200?【英文标题】:Do the Fetch API and Axios see 304 responses as 200?Fetch API 和 Axios 是否将 304 响应视为 200? 【发布时间】:2020-10-04 06:49:01 【问题描述】:

我不知道它是否会,但如果我的服务器响应 HTTP 状态代码 304,Fetch API(特别是 response.ok)和 axios.get() 是否会将响应视为 200?

两者的文档都谈到如果响应代码在 200-299 范围内,则请求被视为成功,但显然 304 不在此范围内。

【问题讨论】:

没有,但是如果重定向成功,那么他们会返回第二个请求的响应,其状态可以是2** 这是个好问题。我试图根据这个 304 对“状态”做出决定,但我现在看到 axios 总是检索 200。 【参考方案1】:

当浏览器发出带有If-MatchIf-Modified-Since 标头的GET 请求,而服务器以304 Not Modified 响应时,客户端只会将其视为200 OK

响应是从缓存而不是服务器提供的,它允许客户端(在您的情况下为 axios)不必了解 HTTP 缓存,但它仍然可以利用它。

我不知道当客户在没有前置条件的情况下发送请求并且仍然得到304 响应时会做什么。客户端不会有更早的缓存响应,所以这肯定会被“破坏”。我想你会得到一个错误,但我很想知道是什么。

【讨论】:

【参考方案2】:

不,他们都不会看到响应为 200。

虽然axios.get 将返回一个promise 拒绝,但使用fetch API 时response.ok 的返回值将是falseresponse.redirected 将是true

【讨论】:

以上是关于Fetch API 和 Axios 是不是将 304 响应视为 200?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Fetch API 在 Axios 中发布数据和参数

ReactJS 中的 Axios 与 Fetch [关闭]

fetch和axios获取数据

Axios 浏览器支持

React Native Fetch / Axios文件上传错误

Vue-Select:如何将此 fetch() 代码转换为使用 axios?