网页应用怎么使用 Cache API 缓存 API 响应数据实现离线查看

阿晨姑娘_9295

阿晨姑娘_9295

2026-10-29

135人浏览

原创

Cache API仅能缓存成功GET响应(200–299),不支持POST/PUT等非幂等请求,且要求跨域资源配置CORS;适合缓存只读、无用户态的API(如新闻列表),需在fetch阶段按需存取并隔离命名管理。

网页应用怎么使用 cache api 缓存 api 响应数据实现离线查看

网页应用不能直接用 Cache API 缓存任意 API 响应来实现“离线查看”,因为 Cache API 本身不支持缓存 POST、PUT 等非 GET 请求,也不缓存跨域且未配置 CORS 的响应,更不会自动保存用户登录态或动态生成的数据。它只缓存 成功返回的 GET 响应(status 200–299),且需由 Service Worker 主动拦截、判断、存取。所以关键不是“能不能缓存 API 数据”,而是“哪些 API 数据适合缓存、怎么安全可控地缓存”。

明确哪些 API 响应可以缓存

不是所有接口都适合放进 Cache API:

  • 只读型接口:如文章列表、商品分类、天气预报(带合理过期时间)、静态配置项等,响应稳定、无用户身份强绑定
  • 带版本或时间戳的接口:如 /api/news?version=20261008,内容固定,可按 URL 精确匹配缓存
  • 响应头含 CORS 支持:服务端必须返回 Access-Control-Allow-Origin: * 或指定域名,否则 cache.put() 会静默失败
  • 避免缓存以下内容:登录态接口(/login)、支付回调、用户私有数据(/api/profile)、带 session cookie 的请求、POST 提交类请求

在 Service Worker 中缓存 API 响应的典型写法

不能靠 install 阶段预加载——API 数据是动态的,得在 fetch 阶段按需缓存:

HTML Text Extract
HTML Text Extract

从HTML页面(URL、文件或标准输入)中提取主体内容文本,去除导航、页脚、广告和模板文本。可直接传递给readability_check或其他文本工具。

下载
  • 先判断请求是否为需要缓存的 API,例如用 URL 匹配:event.request.url.startsWith('/api/news')
  • 用 caches.match() 查本地是否有缓存;有则直接返回
  • 无缓存时调用 fetch(),拿到响应后用 response.clone() 分成两份:一份返回给页面,一份存入缓存
  • 建议加简单 TTL 控制:比如在响应 headers 中写 X-Cache-TTL: 3600,读缓存前检查时间戳,超时则跳过缓存走网络

缓存命名与更新要隔离管理

API 缓存不能和静态资源混在一个缓存空间里,否则清理或升级时容易误删:

  • 单独起名,如 'api-cache-v1',便于独立维护
  • 版本升级时,在 activate 阶段清理旧 API 缓存:caches.keys().then(keys => Promise.all(keys.filter(k => k.startsWith('api-cache-')).map(k => caches.delete(k))))
  • 避免用 cache.addAll() 批量缓存 API 响应——它只接受 URL 字符串,无法传参或控制请求头,不适合动态接口

离线时如何返回合理内容

单纯缓存 API 响应还不够,用户断网刷新页面时需有兜底:

  • 对关键接口返回缓存 + 状态标识,前端 JS 检查响应 headers 中是否有 X-From-Cache: true,提示“当前为离线数据”
  • 设置 fallback 页面:当缓存缺失且网络不可用时,fetch() 抛错,可在 catch 中返回一个预存的 offline HTML 页面或 JSON 结构(如 { error: "offline", data: [] })
  • 不建议缓存整个用户主页 HTML——它通常含个性化内容,应使用 App Shell 架构:壳页面(shell.html)用 Cache-First,数据部分用 API 缓存+降级策略

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2703

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5883

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6850

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

6598

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

943

5

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.09

3703

4

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

2023.11.14

934

3

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

2024.03.12

6626

8

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.08.16

5490

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
GDB 17.2 官方文档集合
GDB 17.2 官方文档集合

共0课时 | 0人学习

Bootstrap 入门安装配置
Bootstrap 入门安装配置

共0课时 | 0人学习

38+ PhpStorm 提示和技巧
38+ PhpStorm 提示和技巧

共1课时 | 228人学习