首页 > 解决方案 > SPA 如何处理未修改的 304 响应

问题描述

假设一个用 Angular 或 vuejs 编写的单页应用程序 (SPA),例如在一个页面上加载 3 个组件,每个组件调用不同的后端 api。

然后,用户刷新页面。进行了相同的 3 次调用,但这次,后端为每个调用返回 304。

SPA 组件只是 js 代码。因此,每次调用后端时,他们都希望返回数据。返回 304 时。没有数据。然而,事情运作良好......

有一些我不明白的魔法。有人可以帮我理解这一点吗?

标签: javascriptangularjsvue.jshttpsingle-page-application

解决方案


如果客户端包含If-Modified-SinceIf-None-Match请求标头,服务器将仅返回没有内容的 304 响应。如果没有这些标头,服务器将始终以完整内容响应。现在有两种可能:

  • Javascript 代码本身会添加这些标头,因为它在某处仍然有数据,以明确允许空响应。Javascript 代码可能已将数据存储在本地存储中。
  • 浏览器包含这些标头是因为它仍然具有数据的隐式缓存,并且如果服务器返回 304,它会透明地将缓存的数据返回给 Javascript 请求。我不确定浏览器是否真的这样做;我不相信,但这是一种可能。

Javascript 更有可能管理本地缓存,也许是使用网络工作者。


推荐阅读