Monitor404

Код 307 Temporary Redirect: временный редирект без смены метода

Код 307 Temporary Redirect означает временный переход на другой URL с обязательным сохранением метода и тела запроса: POST остаётся POST. В этом его главное отличие от 302.

Обновлено 11 октября 2026 г.

Что значит код 307

RFC 9110 (раздел 15.4.8): целевой ресурс временно доступен по другому URL, и клиент должен повторить запрос по новому адресу тем же методом и с тем же телом. Адрес для будущих обращений остаётся прежним. Именно эту гарантию не давал 302, который многие клиенты исторически обрабатывали как «заменить POST на GET».

http
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://, не обращаясь к серверу, и так задумано. Сервер при этом такого ответа не отправлял. Поведение включается заголовком:

http
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 владельцу сайта

nginx
location /api/v1/ {
    return 307 https://api-new.example.com$request_uri;
}
.htaccess
Redirect 307 /api/v1/ https://api-new.example.com/v1/
Express
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:

bash
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.

Читайте также