Что обозначают 300-ые коды ответов http?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
# HTTP 3xx коды ответов (Редирект)
Общая сущность
3xx коды обозначают редирект — ресурс перемещён, и браузер или клиент должен сделать дополнительный запрос на новый адрес.
Основные 3xx коды
300 Multiple Choices
Этап: Редирект Значение: У ресурса несколько вариантов, клиент должен выбрать один Пример: Один документ доступен на разных языках
301 Moved Permanently (Постоянно перемещено)
Этап: Постоянный редирект Значение: Ресурс навсегда переместился на новый URL
Особенности:
- Браузер запомнит новый адрес и будет идти туда напрямую
- Поисковики обновят индекс (перенесут SEO вес)
- GET запрос →GET на новый URL
- POST запрос может быть проблема (изменение метода)
302 Found (Найдено / временный редирект)
Этап: Временный редирект Значение: Ресурс временно находится в другом месте
Особенности:
- Браузер НЕ запомнит это (будет спрашивать снова)
- Поисковики не обновят индекс
- GET → GET на новый URL
- POST → может быть проблема (изменение метода)
303 See Other (Посмотри в другом месте)
Этап: Редирект с изменением метода Значение: Смотри результат в другом месте (обычно через GET)
Особенности:
- Гарантирует изменение POST на GET
- Используется в POST-Redirect-GET паттерне
304 Not Modified (Не изменён)
Этап: Кэширование Значение: Твой кэш ещё актуален, используй его
Особенности:
- БЕЗ тела ответа (значит экономим трафик!)
- Клиент использует закэшированную версию
- Проверяется через If-Modified-Since или ETag
307 Temporary Redirect (Временный редирект)
Этап: Временный редирект (безопасный) Значение: То же, что 302, но с гарантией сохранения метода
Особенности:
- POST остаётся POST (не меняется на GET)
- Временный (в отличие от 301)
- Безопаснее 302 для POST запросов
308 Permanent Redirect (Постоянный редирект)
Этап: Постоянный редирект (безопасный) Значение: То же, что 301, но с гарантией сохранения метода
Особенности:
- POST остаётся POST (не меняется на GET)
- Постоянный (как 301)
- Браузер запомнит и будет идти туда напрямую
Таблица сравнения 3xx кодов
| Код | Название | Тип | Метод | Кэш | Использование |
|---|---|---|---|---|---|
| 300 | Multiple Choices | Выбор | Любой | Нет | Редко |
| 301 | Moved Permanently | Постоянный | GET | Да | Миграция сайта |
| 302 | Found | Временный | GET | Нет | Временное перемещение |
| 303 | See Other | POST→GET | GET | Нет | POST-Redirect-GET |
| 304 | Not Modified | Кэш | N/A | Да | Проверка кэша |
| 307 | Temporary Redirect | Временный | Сохранить | Нет | Временное перемещение (безопасное) |
| 308 | Permanent Redirect | Постоянный | Сохранить | Да | Миграция API (безопасная) |
Практические примеры в Python
from fastapi import FastAPI, status, RedirectResponse
app = FastAPI()
# 301
@app.get("/old-docs")
async def old_docs():
return RedirectResponse(
url="/docs",
status_code=status.HTTP_301_MOVED_PERMANENTLY
)
# 302
@app.get("/temp-page")
async def temp_page():
return RedirectResponse(
url="/maintenance",
status_code=status.HTTP_302_FOUND
)
# 303 POST-Redirect-GET
@app.post("/create-user")
async def create_user(data: dict):
user_id = "123"
return RedirectResponse(
url=f"/users/{user_id}",
status_code=status.HTTP_303_SEE_OTHER
)
Важные правила
- 301/308 для постоянных изменений — API версии, перемещение доменов
- 302/307 для временных — техническое обслуживание, балансировка
- 303 после POST — POST-Redirect-GET паттерн
- 304 для оптимизации — кэширование и ETag
Вывод
3xx коды управляют редиректами. Правильное использование улучшит SEO и предотвратит потерю данных при POST.