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