我有形式的 URL http://domain/image/⟨uuid⟩/42x42/some_name.png
。Web 服务器 (nginx) 配置为查找文件/some/path/image/⟨uuid⟩/thumbnail_42x42.png
,如果文件不存在,则将 URL 发送到后端(Django 通过 mod_wsgi),然后生成缩略图。然后后端发出 302 重定向到客户端请求的完全相同的 URL,其想法是在第二次请求时服务器会注意到缩略图文件并直接发送它。
问题是,这适用于所有浏览器吗?到目前为止,测试显示没有问题,但我可以确定所有用户代理都会按预期解释吗?
更新:让我澄清一下意图。目前这工作如下:
- 客户端请求图像的缩略图。
- 服务器看到文件不存在,所以将请求转发到后端。
- 后端创建缩略图并返回 302。
- 后端释放所有资源,让服务器将新生成的文件共享给当前和后续客户端。
让后端服务于新创建的图像更糟糕,原因有两个:
- 必须创建两种提供相同数据的方式;
- 服务器在提供静态内容方面要好得多。如果客户端的链接非常慢怎么办?后端不是特别快,内存效率也不是特别高,在给客户端喂食的同时将其保存在内存中可能是一种浪费。
所以我让后端工作的时间最短。
更新²:我非常感谢有大量浏览器经验的人的一些 RFC 参考或意见。所有这些肯定的答案都令人愉快,但它们看起来有些毫无根据。