У меня есть URL-адрес формы http://domain/image/⟨uuid⟩/42x42/some_name.png
. Веб-сервер (nginx) настроен на поиск файла /some/path/image/⟨uuid⟩/thumbnail_42x42.png
, и если он его не существует, он отправляет URL-адрес на сервер (Django через mod_wsgi), который затем генерирует миниатюру. Затем бэкэнд испускает перенаправление 302 на тот же URL-адрес, который был запрошен клиентом, с мыслью, что по этому второму запросу сервер заметит файл миниатюр и отправит его напрямую.Можно ли перенаправить на тот же URL-адрес?
Вопрос в том, будет ли это работать со всеми браузерами? Пока тестирование не показало никаких проблем, но могу ли я быть уверенным, что все пользовательские агенты будут интерпретировать это как предназначение?
Обновление: Позвольте мне уточнить намерение. В настоящее время это работает следующим образом:
- Клиент запрашивает миниатюру изображения.
- Сервер видит, что файл не существует, поэтому он пересылает запрос на сервер.
- Бэкэнд создает миниатюру и возвращает 302.
- Бэкэнд выпускает все ресурсы, позволяя серверу совместно использовать вновь созданный файл для текущих и последующих клиентов.
Имея бэкенд служить вновь созданное изображение хуже по двум причинам:
- Два способа сервировки должны быть созданы одни и те же данные;
- Сервер намного лучше обслуживает статический контент. Что делать, если клиент имеет чрезвычайно медленную ссылку? Бэкэнд не особенно быстрый и эффективный с точки зрения памяти и сохраняющий его в памяти, в то время как ложная подача клиента может быть расточительной.
Таким образом, я держу бэкэнд в течение минимального промежутка времени.
Обновление2: Я действительно ценю некоторые ссылки или мнения RFC о ком-то с опытом работы с большим количеством браузеров. Все эти положительные ответы приятны, но они выглядят несколько необоснованными.