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-Match
或If-Modified-Since
标头的GET 请求,而服务器以304 Not Modified
响应时,客户端只会将其视为200 OK
。
响应是从缓存而不是服务器提供的,它允许客户端(在您的情况下为 axios)不必了解 HTTP 缓存,但它仍然可以利用它。
我不知道当客户在没有前置条件的情况下发送请求并且仍然得到304
响应时会做什么。客户端不会有更早的缓存响应,所以这肯定会被“破坏”。我想你会得到一个错误,但我很想知道是什么。
【讨论】:
【参考方案2】:不,他们都不会看到响应为 200。
虽然axios.get 将返回一个promise 拒绝,但使用fetch API 时response.ok
的返回值将是false
和response.redirected
将是true
。
【讨论】:
以上是关于Fetch API 和 Axios 是不是将 304 响应视为 200?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Fetch API 在 Axios 中发布数据和参数