Чем forward отличается от redirect?
- Меняется ли URL при forward?
Forward — внутренняя передача запроса другому обработчику в том же запросе: URL в браузере не меняется, атрибуты запроса сохраняются. Redirect — ответ 302/303 с Location: браузер делает новый запрос по новому адресу.
- Forward — только внутри приложения, один запрос
- Redirect — можно на другой сайт, два запроса, данные — через URL или flash-атрибуты
- После POST — redirect (Post/Redirect/Get)
А ещё В Spring MVC: "forward:/path" и "redirect:/path"
Подробно
Из механики следуют практические различия. forward дешевле (нет второго обращения к серверу) и сохраняет атрибуты запроса, но работает только внутри того же контекста — на внешний адрес переадресовать так нельзя. redirect дороже, зато меняет адресную строку, что решает классическую проблему повторной отправки формы по F5: после обработки POST делают redirect на GET. Поскольку redirect создаёт новый запрос, обычные атрибуты не переживают переход, и для однократной передачи данных существуют flash-атрибуты, живущие в сессии до следующего запроса.
Что хотят услышать
- Различия по числу запросов, URL, области.
- Когда что использовать.
Частые ошибки
- Отвечать на POST рендерингом страницы вместо redirect и получать дубли при обновлении.
- Пытаться пробросить атрибуты запроса через redirect обычным способом.
Проверьте себя
Несколько верных вариантов. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓forward — на сервере в рамках одного запроса, URL в браузере не меняется
- ✓redirect — ответ 3xx, и браузер делает новый запрос по новому адресу
- ✓При redirect атрибуты запроса теряются — их передают flash-атрибутами
- ✗forward можно выполнить на внешний домен: сервер сам запросит страницу и вернёт её клиенту как свою
Что спросят дальше
- Что такое паттерн POST/Redirect/GET?
- Где физически живут flash-атрибуты?
Разбор темы
- Сервлеты, фильтры и встроенный контейнер
Сервлет и встроенный Tomcat, модель thread-per-request, потокобезопасность контроллеров, Filter против Interceptor и forward/redirect.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.