HTTPQUERY
Русский

302 Found

Применение

При получении кода состояния 302 Found клиент понимает, что запрошенный ресурс временно перемещён. Второй запрос получает ресурс по новому адресу. Это проще, чем 301, поскольку от клиента не требуется обновлять внутренние ссылки.

Примечание

Для обратной совместимости клиенту разрешено изменить метод запроса с POST на GET при перенаправлении. Чтобы устранить неоднозначность, сервер возвращает вместо него другой код состояния. Код 303 указывает, что перенаправление должно использовать метод GET, а код 307 требует сохранения исходного метода.

К распространённым причинам ответов 302 относятся переход с HTTP на HTTPS (часто здесь уместнее 301), нормализация URL (завершающий слеш), A/B-тестирование, маршрутизация содержимого по геолокации и временные перенаправления на период обслуживания.

Примечание

302 — это успешное перенаправление, а не ошибка. Сервер нашёл ресурс и направляет клиента по его текущему адресу. Чтобы устранить нежелательные перенаправления 302: убедитесь, что перенаправление задумано намеренно, замените его на 301, если перемещение постоянное, и проверьте настройки CMS или .htaccess на случай непреднамеренных правил.

Кэшируемость

Ответ 302 по умолчанию не кэшируется. В отличие от 301 и 308, для сохранения 302 в кэше требуются явные заголовки Cache-Control или Expires.

Влияние на SEO

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

Пример

Клиент запрашивает временно перемещённый ресурс. Сервер указывает новый адрес и предоставляет соответствующее сообщение для отображения на стороне клиента.

Запрос

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

Ответ

HTTP/1.1 302 Found
Location: http://example.com/testing/news.html
Content-Type: text/html
Content-Length: 167

<h1>The Newsfeed has moved</h1>
<body>
The site is under development and the newsfeed has
temporarily moved to
<a href=/testing/news.html>here</a>.
</body>

Примеры кода

.NET

HttpStatusCode.Found

Rust

http::StatusCode::FOUND

Rails

:found

Go

http.StatusFound

Symfony

Response::HTTP_FOUND

Python3.5+

http.HTTPStatus.FOUND

Java

java.net.HttpURLConnection.HTTP_MOVED_TEMP

Apache HttpComponents Core

org.apache.hc.core5.http.HttpStatus.SC_MOVED_TEMPORARILY

Angular

@angular/common/http/HttpStatusCode.Found