Ответ
HTTP-коды состояния 3xx (Redirection) информируют клиента о том, что для завершения запроса необходимо предпринять дополнительные действия, обычно — обратиться по другому URI (адресу).
Ключевые коды и их семантика:
| Код | Название | Назначение | Кешируемость |
|---|---|---|---|
| 301 | Moved Permanently | Ресурс навсегда перемещен на новый URL. Браузеры и поисковики обновляют ссылки. | Да |
| 302 | Found (ранее Moved Temporarily) | Ресурс временно доступен по другому адресу. Последующие запросы должны идти к исходному URL. | По умолчанию нет |
| 307 | Temporary Redirect | Аналогичен 302, но гарантирует, что метод запроса (GET/POST) не будет изменен при редиректе. | Нет |
| 308 | Permanent Redirect | Аналогичен 301, но гарантирует сохранение метода запроса. | Да |
| 304 | Not Modified | Ответ на условный запрос (с заголовками If-Modified-Since или If-None-Match). Контент не изменился, клиент должен использовать кешированную версию. |
— |
Пример ответа сервера с редиректом 301:
HTTP/1.1 301 Moved Permanently
Location: https://new-example.com/api/v2/resource
Content-Length: 0
Важно: Для POST-запросов использование 301/302 может привести к изменению метода на GET при следующем запросе. Для безопасного перенаправления POST-запросов используйте 307 или 308.
Ответ 18+ 🔞
А, слушай, вот эта вся хуйня с перенаправлениями в HTTP! Ну, типа, сервер такой: «Э, дружок-пирожок, иди-ка ты нахуй отсюда, но не просто так, а вот туда». Это как если бы ты пришёл в паб, а бармен такой: «Мы, блядь, переехали, новый адрес — на соседней улице».
Основные коды, которые тебе вломит сервер, если он решил, что ты не там ищешь:
| Код | Как это назвали умники | Что это значит на самом деле | Кеш запомнит? |
|---|---|---|---|
| 301 | Переехал навсегда | Ресурс насовсем свалил на новый адрес. Браузеры и Гугл с Яндексами должны обновить свои записочки. | Ага |
| 302 | Нашли (раньше «Временно перемещён») | Ресурс пока что тусуется по другому адресу. Но в следующий раз стучись в старую дверь. | Обычно нет |
| 307 | Временный редирект | Почти как 302, но тут тебе гарантируют, что если ты пришёл с POST-запросом (ну, типа, форму отправить), то и после редиректа он останется POST'ом, а не превратится в GET. | Нет |
| 308 | Постоянный редирект | Брат-близнец 301, но тоже с гарантией, что метод запроса не поменяется. Насовсем, но с сохранением сути. | Да |
| 304 | Не изменено | Это когда ты такой умный и спрашиваешь сервер: «Эй, а у тебя там что-нибудь новенькое с [такой-то даты]?». А он тебе: «Нихуя не изменилось, юзай то, что у тебя в кеше лежит». | — |
Вот как выглядит пинок от сервера с редиректом 301:
HTTP/1.1 301 Moved Permanently
Location: https://new-example.com/api/v2/resource
Content-Length: 0
Важный момент, блядь: Если ты шлёшь POST-запрос (например, форму логина), а сервер в ответ — 301 или 302, то некоторые старые браузеры или клиенты могут, ебать, превратить следующий запрос в GET, и всё сломается. Поэтому для POST'ов юзай 307 (временно) или 308 (навсегда), они честные, метод не сломают.