12

我有形式的 URL http://domain/image/⟨uuid⟩/42x42/some_name.png。Web 服务器 (nginx) 配置为查找文件/some/path/image/⟨uuid⟩/thumbnail_42x42.png,如果文件不存在,则将 URL 发送到后端(Django 通过 mod_wsgi),然后生成缩略图。然后后端发出 302 重定向到客户端请求的完全相同的 URL,其想法是在第二次请求时服务器会注意到缩略图文件并直接发送它。

问题是,这适用于所有浏览器吗?到目前为止,测试显示没有问题,但我可以确定所有用户代理都会按预期解释吗?

更新:让我澄清一下意图。目前这工作如下:

  1. 客户端请求图像的缩略图。
  2. 服务器看到文件不存在,所以将请求转发到后端。
  3. 后端创建缩略图并返回 302。
  4. 后端释放所有资源,让服务器将新生成的文件共享给当前和后续客户端。

让后端服务于新创建的图像更糟糕,原因有两个:

  1. 必须创建两种提供相同数据的方式;
  2. 服务器在提供静态内容方面要好得多。如果客户端的链接非常慢怎么办?后端不是特别快,内存效率也不是特别高,在给客户端喂食的同时将其保存在内存中可能是一种浪费。

所以我让后端工作的时间最短。

更新²:我非常感谢有大量浏览器经验的人的一些 RFC 参考或意见。所有这些肯定的答案都令人愉快,但它们看起来有些毫无根据。

4

2 回答 2

3

如果没有,客户端就坏了。大多数客户端将遵循重定向循环,直到达到最大值。所以是的,在您的后端由于任何原因不生成缩略图之前应该没问题。

您可以改为将 URL 更改为http://domain/djangoapp/generate_thumbnail,这将返回缩略图和正确的内容类型等

于 2008-09-24T10:14:01.340 回答
0

是的,可以重定向到与以前相同的 URI。

于 2008-09-24T11:00:45.037 回答