Насколько безопасно перенаправить на тот же URL? - PullRequest
10 голосов
/ 24 сентября 2008

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

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

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

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

Если бэкэнд обслуживает только что созданный образ, он хуже по двум причинам:

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

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

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

Ответы [ 2 ]

1 голос
/ 24 сентября 2008

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

Вместо этого вы можете изменить URL-адреса на http://domain/djangoapp/generate_thumbnail, и это вернет миниатюру и правильный тип содержимого и т. Д.

0 голосов
/ 24 сентября 2008

Да, можно перенаправить на тот же URI, который вы использовали ранее.

...