在我们的项目中,我们决定使用预签名的 url 作为基本的身份验证机制。
精简我们的设置涉及
- 存储服务器
- api服务器
- 客户端(在浏览器中运行的角度 SPA)
我们使用预签名的 url 将文件从客户端直接上传和下载到存储服务器。
上传流程(简化):
- 客户端发送api:嘿,我想上传那个
- api 进行授权和验证,做一些数据库工作并返回一个预签名的 url
- 客户端直接上传到存储服务器
到目前为止,一切都很好。最大的问题是“下载”流程。
- 客户问api:嘿,给我看看你有什么的清单
- api 进行授权、验证并返回一个 json 对象列表,这些对象还包含用于显示文件(图像)的预签名获取 url
- 客户端显示对象数据列表并使用预签名的 url 嵌入直接从存储服务器下载的图像
这很好用,但会将浏览器缓存增加到数 GB 的 RAM。
发生这种情况是因为在多次调用中生成的预签名 url 不一样,并且在每个请求的授权部分(例如,保持新的生命周期)不同。当用户在分页列表中向前和向后单击时,客户端将收到不同的 url,并且浏览器缓存将它们视为不同的图像。
到目前为止,这似乎是浏览器端的正确行为(不同的 url 等于不同的图像)。
到目前为止,这似乎是 api 方面的正确行为(新调用将返回新的生命周期)。
有没有任何预期的方法来处理这个问题?
流程本身是错误的吗?
除了在运行多个 api 实例时实现集中的预签名 url 缓存之外,还有什么方法可以解决这个问题?
希望有人也可以为我可以使用的有意义的标签提供建议。