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