2008-09-24 3 views
8

У меня есть URL-адрес формы http://domain/image/⟨uuid⟩/42x42/some_name.png. Веб-сервер (nginx) настроен на поиск файла /some/path/image/⟨uuid⟩/thumbnail_42x42.png, и если он его не существует, он отправляет URL-адрес на сервер (Django через mod_wsgi), который затем генерирует миниатюру. Затем бэкэнд испускает перенаправление 302 на тот же URL-адрес, который был запрошен клиентом, с мыслью, что по этому второму запросу сервер заметит файл миниатюр и отправит его напрямую.Можно ли перенаправить на тот же URL-адрес?

Вопрос в том, будет ли это работать со всеми браузерами? Пока тестирование не показало никаких проблем, но могу ли я быть уверенным, что все пользовательские агенты будут интерпретировать это как предназначение?

Обновление: Позвольте мне уточнить намерение. В настоящее время это работает следующим образом:

  1. Клиент запрашивает миниатюру изображения.
  2. Сервер видит, что файл не существует, поэтому он пересылает запрос на сервер.
  3. Бэкэнд создает миниатюру и возвращает 302.
  4. Бэкэнд выпускает все ресурсы, позволяя серверу совместно использовать вновь созданный файл для текущих и последующих клиентов.

Имея бэкенд служить вновь созданное изображение хуже по двум причинам:

  1. Два способа сервировки должны быть созданы одни и те же данные;
  2. Сервер намного лучше обслуживает статический контент. Что делать, если клиент имеет чрезвычайно медленную ссылку? Бэкэнд не особенно быстрый и эффективный с точки зрения памяти и сохраняющий его в памяти, в то время как ложная подача клиента может быть расточительной.

Таким образом, я держу бэкэнд в течение минимального промежутка времени.

Обновление2: Я действительно ценю некоторые ссылки или мнения RFC о ком-то с опытом работы с большим количеством браузеров. Все эти положительные ответы приятны, но они выглядят несколько необоснованными.

ответ

1

Если это не так, клиент сломан. Большинство клиентов будут следовать за циклами перенаправления до максимального значения. Так что да, это должно быть хорошо, пока ваш бэкэнд не генерирует эскиз по какой-либо причине.

Вы могли бы вместо того, чтобы изменить URL, чтобы быть http://domain/djangoapp/generate_thumbnail и вернет миниатюру и надлежащее содержание типа и так далее

0

Да, это прекрасно, чтобы перенаправлять на тот же URI, как вы были ранее.

Смежные вопросы