308 редирект
Вы переносите API со старого на новый домен, но выбираете неправильный редирект. Браузер клиента получает 301 редирект и переделывает POST запрос в GET — данные теряются. 301 редирект, самый популярный, не гарантирует сохранение метода запроса. Нужен Редиректы сайта. При 308 метод запроса сохраняется: был POST — останется POST на новом адресе. Это постоянное перенаправление с сохранением метода. На сервере (nginx, .htaccess, PHP) нужна правильная настройка 308 редирект, ошибка конфигурации обходится дорого. Для SEO важно: Google и Яндекс распознают 308 как постоянное перенаправление. Робот индексирует новые страницы сайта, передает вес со старого URL, трафик переходит туда. Выбор между 301 и 308 редирект — не просто теория, это работа вашего приложения и результаты в поиске на поисковых системах.
Что такое 308 редирект и чем он отличается от других кодов ответа

Определение 308 редиректа: постоянное перенаправление с сохранением метода
308 — это HTTP код ответа, который отправляет сервер при постоянном перенаправлении ресурса. Полное название: 308 permanent redirect. Браузер получает этот ответ с заголовком location, в котором указан новый URL, и перенаправляет пользователя туда. Главное отличие 308 от других кодов перенаправления: метод запроса при этом сохраняется полностью. Если исходный запрос был POST, новый запрос на другую страницу тоже останется POST. Если это был GET — останется GET.
Звучит логично, но исторически это не всегда работало. При 301 moved permanently браузеры часто преобразуют POST в GET, что приводит к потере данных. При 308 постоянное перенаправление работает правильно: метод не изменится никогда. Это гарантия на протоколе.
Историческая причина появления 308: проблема с браузерами при 301
Код 301 существует с 1991 года. Спецификация HTTP была неоднозначной: она не запрещала браузерам преобразовать метод запроса при редиректе. Разработчики браузеров решили, что это логично — если адрес переместился, зачем пересылать тело POST запроса? Они стали автоматически менять POST на GET при 301.
На практике это разрушало системы. Платежная форма отправляла данные карты через POST. При миграции сайта на новый адрес с 301 редиректом браузер преобразовывал это в GET — данные терялись в процессе отправки. Платежи не обрабатывались. API endpoint для обработки заказов ожидал данных в теле POST запроса, но вместо этого получал пустой GET. Заказы теряются. Критичные данные исчезали.
В RFC 7538 (2015 год) разработчики официально утвердили новый код 308 специально для решения этой проблемы. Постоянное перенаправление, которое гарантирует сохранение метода запроса при переносе на новый адрес. Никаких преобразований со стороны браузеров.
Сравнительная таблица всех типов редиректов
Основных HTTP кодов перенаправления пять. Каждый решает свою задачу:
301 Moved Permanently — постоянное перенаправление. Самое популярное, поддерживается везде. Проблема: браузеры часто меняют метод запроса с POST на GET. Google и Яндекс передают вес ссылок со старого URL на новый. Используется для миграции страниц сайта, но требует осторожности с критичными данными.
302 Found — временное перенаправление. Название путает (Found означает «найдено на другом адресе»). Поведение браузеров непостоянно. Поисковые системы не передают полный рейтинг.
303 See Other — специальный редирект, который всегда меняет метод на GET, независимо от структуры исходного запроса. Используется после отправки формы: обработать данные через POST, потом показать результат через GET на другую страницу.
307 Temporary Redirect — временное перенаправление с гарантией сохранения метода запроса. Как 302, но надежнее, когда важно сохранить способ доставки данных. Кэширование не работает (временное).
308 Permanent Redirect — комбинация лучшего из 301 и 307. Постоянное перенаправление (как 301) с гарантией сохранения метода запроса (как 307). Кэширование работает как при 301. Правильный выбор для миграции критичных API, платежных систем, приложений.
Поисковые системы видят разницу. При 301 и 308 робот передает трафик со старого URL на новый адрес полностью. При остальных кодах изменение считается временным.
Как работает 308 на стороне сервера и стороне клиента
На стороне сервера нужно настроить конфигурацию так, чтобы отправлялся правильный код ответа с новым адресом в заголовке location.
Пример конфигурации Nginx для сервера:
server {
listen 80;
server_name old.com;
return 308 https://new.com$request_uri;
}
Apache .htaccess — реврайт с флагом:
RewriteRule ^(.*)$ https://new.com/$1 [R=308,L]
Node.js / Express:
res.redirect(308, 'https://new.com' + req.originalUrl);
На стороне клиента браузер получает ответ: статус-строка «308 Permanent Redirect» и заголовок location с новым URL адреса. Автоматически создается новый запрос на указанный адрес. Критично: метод запроса сохраняется. Данные из тела запроса (при POST) полностью доставляются на новую страницу. Никаких потерь информации.
Почему сохранение метода запроса важно для критичных данных
Метод HTTP запроса — это деталь, которая может стоить денег.
Платежная система: пользователь заполняет форму с данными карты, суммой, адресом доставки. Всё отправляется через POST в теле запроса. Если использовать 301 редирект и браузер преобразует это в GET, данные переместятся в URL строку. Это не безопасно для персональных данных и не функционально. При 308 этого не происходит.
API обработки заказов: приложение отправляет заказ через POST на старый endpoint. Вы настроили 301 редирект на новый домен. Клиент или браузер преобразует POST в GET. Новый сервис получает пустой запрос без информации о заказе. Данные теряются. Заказ не обрабатывается. При 308 метод сохраняется, данные доставляются, система обрабатывает заказ корректно.
SEO и веб-архитектура: при большой миграции сайта на новый адрес поисковые системы Google и Яндекс переиндексируют страницы. При 308 permanent redirect робот понимает: это постоянное перенаправление, вес передается полностью. Трафик из поиска перемещается на новый адрес без потерь. При 301 такой же результат, но с риском для POST данных.
Выбор между 301 и 308 — это не техническая педантичность. Это выбор между популярностью (301 везде используется и везде поддерживается) и правильностью (308 сохраняет целостность данных гарантированно). Для систем, где каждый запрос важен, 308 — правильное решение.
Когда и как правильно использовать 308 редирект: примеры кода и чек-лист
В каких сценариях применяют 308 редирект?
При миграции интернет-магазина на новый адрес требуется сохранить все данные заказа, отправляемые методом POST. Если старый URL shop.example.com/checkout перемещён на www.newplatform.com/purchase, браузер клиента автоматически повторит запрос со всеми параметрами. 308 permanent redirect гарантирует, что персональные данные не потеряются на стороне сервера. Для систем обработки платежей это критично. Форма обратной связи — еще один типичный сценарий: обработчик на старом адресе /feedback переносится на новый хост. 308 сохраняет метод запроса и все значения полей формы. Без него (при 301 moved permanently или 302 found временное перенаправление) форма переправляется как GET и данные теряются. С точки зрения разработки сайтов это означает выбор правильного типа редиректа. С точки зрения SEO 308 передает вес ссылки поисковым системам как 301, поэтому трафик сайта сохраняется.
Как настроить 308 редирект для популярных технологий?
Node.js Express: response.redirect(308, 'https:/. Python Flask: redirect(url_for('endpoint'), code=308). Nginx: return 308 $request_uri; в блоке location. Apache .htaccess: RewriteEngine On и RewriteRule ^oldpath$ https:/. PHP: header('Location: https:/. Проверить работу следует через DevTools браузера — откройте вкладку Network и отправьте запрос. Должен показать ответ 308 с заголовком Location, содержащим новый URL-адрес. Логи на стороне сервера подтвердят, что перенаправление произошло корректно. Используйте curl команду для проверки: curl -i -X POST https:/. Мониторинг трафика через поисковые системы Google и Яндекс указывает на успешность миграции сайта без потери трафика.
Каких ошибок при 308 редиректе следует избегать?
Цепочка редиректов замораживает браузер: 308 ведет на другой 308, тот ведет еще на третий. Браузер выполняет много запросов вместо одного. Забыли обновить внутренние ссылки в коде и карта сайта указывает старый адрес — для SEO это определяет потерю трафика. Потеря параметров запроса, если не передали query string целиком с новым URL. Кэширование браузером старых ответов — если хотите проверить работу, очистите кэш.
Если хотите убедиться, что 308 работает правильно, используйте инструменты: вкладка Network показывает код ответа 308, логи на стороне сервера подтверждают работу, мониторинг трафика указывает на успех миграции. Для Junior разработчика рекомендуется помнить: 308 сохраняет POST — это гарантия целостности данных заказов. Для Senior архитектора следует тестировать разные версии браузеров для поддержки 308 permanent redirect. Для SEO-специалиста важно объяснить клиенту: 308, как 301 moved permanently, сохраняет вес ссылки при перемещении контента, поэтому трафик не потеряется при миграции сайта.