首页 > 解决方案 > 如何让浏览器缓存没有永久 URL 的 Web 资源?

问题描述

问题

该网页需要下载多个文件,例如${some_id}.file. 但

如果前端只是这样做:

fetch(`https://some.cloud.com/${some_generated_token}`)

每次刷新页面时都必须下载,因为 URL 正在更改,因此它不能使用这些电子标签内容进行缓存,并且用户不会喜欢它。


方法一

编写我自己的文件服务器,以便前端从https://my-server.com/download/${some_id}.file.

服务器在下载前检查用户的权限。如果检查通过,则发送重定向(302 临时移动)到真正的下载 url https://some.cloud.com/${some_generated_token},否则返回错误。

也许我应该etag在响应中放一个标题,从真实的复制而来。我不确定这是否可行。是否可以使浏览器缓存从重定向 URL 下载的文件?

方法二

为客户端手动实现一个缓存系统,它会在必要时在后台下载真实文件。所以文件实际上是从缓存而不是从云中加载的。文件由类似${some_id}_${checksum}.

缺点可能是我必须手动管理存储。(所以要么我必须用另一个设置来打扰用户来决定容量,要么浏览器决定这个,我没有办法协商。我不确定这个。)


那么最好/可能的方法是什么?以及如何实施?

标签: web

解决方案


方法 3(智能代理):在您自己的主机(提供前端服务的地方)上提供一个稳定的 URL,在标头中传递令牌,并让该端点从云系统中提取文件(使用令牌) 并将其转发到前端。这只有在 A) 文件大小不是很大的情况下才有意义,它会给您自己的系统传输量带来巨大的成本,并且 B) 您确实有一个后端来解决这个问题。


推荐阅读