HTTPQUERY
Русский

307 Temporary Redirect

Применение

Код состояния 307 Temporary Redirect указывает, что целевой ресурс доступен по другому URL. Клиент выполняет новый запрос по URL, указанному в заголовке Location, и ему не разрешается менять метод запроса. Этим он отличается от кода состояния 302, который позволяет клиенту переключиться с POST на GET.

Когда желаемое поведение — именно смена метода запроса, рекомендуемой альтернативой является код состояния 303. Например, для перенаправления отправки формы по POST на страницу подтверждения используется 303 с последующим GET.

Клиент обязан повторить точно тот же метод, заголовки и тело по новому URL. Сервер обрабатывает перенаправленный запрос обычным образом. Поскольку 307 Temporary Redirect не является постоянным, ожидается, что будущие запросы будут использовать исходный URL и заново проверять временное изменение.

Постоянный аналог — 308: он точно так же сохраняет метод запроса, но сигнализирует, что перемещение постоянное и клиентам следует обновить сохранённые ссылки.

По умолчанию ответ не кэшируется. Чтобы сделать перенаправление кэшируемым, добавьте заголовок Cache-Control или Expires.

Код состояния 307 Temporary Redirect также служит внутренним перенаправлением, когда политика HSTS объявлена через заголовок Strict-Transport-Security или через список предзагрузки HSTS. Клиент использует этот код состояния для перехода с HTTP на защищённое соединение по HTTPS, не обращаясь к серверу.

Примечание

Браузеры формируют «307 Internal Redirect» в DevTools при переключении HTTP на HTTPS через HSTS. Это перенаправление происходит полностью в браузере, без сетевого запроса. В DevTools появляется заголовок Non-Authoritative-Reason: HSTS. Циклы перенаправлений 307 между HTTP и HTTPS указывают на конфликт между HSTS и правилами перенаправления на стороне сервера. Убедитесь, что сервер перенаправляет только на HTTP-порту.

Примечание

303 заставляет последующий запрос использовать GET независимо от исходного метода, что делает 303 стандартом для перенаправления после POST. 307 сохраняет исходный метод и тело. Клиент повторно отправляет тот же POST/PUT/PATCH по новому URL.

Влияние на SEO

Google рассматривает 307 как слабый сигнал того, что цель перенаправления является предпочтительным URL, в отличие от 301/308, которые являются сильными сигналами. Google индексирует либо исходный, либо целевой URL. Код 307, оставленный надолго, со временем может быть истолкован как постоянное перенаправление, поэтому для постоянного изменения лучше подходит 308.

Пример

Клиент запрашивает ресурс, и сервер отвечает 307 Temporary Redirect, поскольку ресурс доступен по альтернативному адресу.

Запрос

GET /news.html HTTP/1.1
Host: example.com

Ответ

HTTP/1.1 307 Temporary Redirect
Location: http://example.com/breaking/news.html

Примеры кода

.NET

HttpStatusCode.TemporaryRedirect

Rust

http::StatusCode::TEMPORARY_REDIRECT

Rails

:temporary_redirect

Go

http.StatusTemporaryRedirect

Symfony

Response::HTTP_TEMPORARY_REDIRECT

Python3.5+

http.HTTPStatus.TEMPORARY_REDIRECT

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_TEMPORARY_REDIRECT

Angular

@angular/common/http/HttpStatusCode.TemporaryRedirect