Код 307 Temporary Redirect: временный редирект без смены метода
Код 307 Temporary Redirect означает временный переход на другой URL с обязательным сохранением метода и тела запроса: POST остаётся POST. В этом его главное отличие от 302.
Обновлено 11 октября 2026 г.
Что значит код 307
RFC 9110 (раздел 15.4.8): целевой ресурс временно доступен по другому URL, и клиент должен повторить запрос по новому адресу тем же методом и с тем же телом. Адрес для будущих обращений остаётся прежним. Именно эту гарантию не давал 302, который многие клиенты исторически обрабатывали как «заменить POST на GET».
POST /api/orders HTTP/1.1
Host: example.com
HTTP/1.1 307 Temporary Redirect
Location: https://api.example.com/orders
# клиент повторяет POST с тем же телом уже по новому адресуСравнение: что происходит с POST
| Код | Постоянство | POST после редиректа |
|---|---|---|
| 301 | постоянный | клиент может заменить на GET |
| 302 | временный | клиент может заменить на GET |
| 307 | временный | остаётся POST, тело сохраняется |
| 308 | постоянный | остаётся POST, тело сохраняется |
307 Internal Redirect в Chrome: это не сервер
Если сайт использует HSTS, то при открытии http:// адреса Chrome в DevTools показывает строку «307 Internal Redirect» с пояснением Non-Authoritative-Reason: HSTS. Это сам браузер подставляет https://, не обращаясь к серверу, и так задумано. Сервер при этом такого ответа не отправлял. Поведение включается заголовком:
Strict-Transport-Security: max-age=31536000; includeSubDomainsКогда выбирать 307 вместо 302
- перенос обработчика формы или webhook на другой адрес, пока старый ещё работает: тело запроса дойдёт без потерь;
- временное переключение API на резервный сервер: клиенты продолжат отправлять PUT и DELETE теми же методами;
- когда код обязан быть предсказуемым для любого клиента: 302 каждый клиент вправе истолковать по-своему, а 307 даёт гарантию.
Подумайте, что вы перенаправляете. Клиент повторит запрос целиком, включая тело и, в зависимости от клиента, заголовки Authorization. Не отправляйте POST с паролями или токенами редиректом на чужой домен.
HSTS: как убедиться, что 307 делает браузер
Если в DevTools вы видите 307 Internal Redirect, но в журнале сервера такого запроса нет, это HSTS. Домен попал в список браузера: после первого ответа с Strict-Transport-Security Chrome сам подменяет http:// на https:// на время max-age. Сбросить запись для своего домена в Chrome можно на странице chrome://net-internals/#hsts (раздел Delete domain security policies). Для сайтов в списке HSTS Preload отменить это на стороне пользователя нельзя, и это нормально: HTTPS на таком домене обязателен.
Что делать посетителю
Ничего, браузер сам откроет нужную страницу. Если форма не отправилась или появилось «слишком много перенаправлений», очистите cookie сайта и повторите попытку, а также отключите VPN и расширения для блокировки рекламы. Для зацикливания смотрите ERR_TOO_MANY_REDIRECTS.
Как настроить 307 владельцу сайта
location /api/v1/ {
return 307 https://api-new.example.com$request_uri;
}Redirect 307 /api/v1/ https://api-new.example.com/v1/app.post("/api/orders", (req, res) => {
res.redirect(307, "https://api-new.example.com/orders");
});Используйте 307, когда запрос нельзя терять или переписывать: перенос обработчика формы, временный переход API на резервный сервер, плановое переключение на другой бэкенд. Для обычного перехода посетителя на другую страницу достаточно 302.
Как 307 видят Яндекс и Google
Как и 302, статус 307 для поисковиков означает временное перенаправление: в индексе, как правило, остаётся исходный URL. Используйте 307 там, где перемещение действительно временное. Если адрес сменился навсегда, ставьте 301 или 308, иначе старый URL может остаться в выдаче. Подробнее о выборе в статье 301 редирект.
Как проверить
Для GET-адресов подойдёт проверка кода ответа: она покажет код и цель редиректа. Для POST используйте curl:
curl -i -X POST -d "a=1" https://example.com/api/orders
# добавьте -L, чтобы curl пошёл по редиректу; при 307 он повторит POSTЧастые вопросы
Что такое 307 Internal Redirect?
Это переход на HTTPS, который выполняет сам Chrome, если домен находится в списке HSTS. Запрос до сервера не доходит, поэтому в логах сервера этого редиректа нет.
Чем 307 отличается от 302?
Оба временные. При 307 метод и тело запроса обязаны сохраниться, а при 302 клиент вправе заменить POST на GET.
Можно ли использовать 307 для SEO-редиректа?
Только для временных перемещений. Для постоянного переезда страницы используйте 301 или 308.