Ответ Боба Амана о различии между кодами перенаправления HTTP (21 января 2011 г.) говорит:
Я лично рекомендую избегать 302, если у вас есть выбор. Много клиенты не следуют спецификации, когда сталкиваются с ошибкой 302. Для временные перенаправления, вы должны использовать либо 303, либо 307, в зависимости от какой тип поведения вы хотите для запросов без GET. Предпочтение от 307 до 303 если вам не нужно альтернативное поведение при POST/PUT/DELETE.
Однако недавняя запись в блоге, опубликованная 18 февраля 2020 года, под названием 301, 302, 303, 307 и 308: какой код состояния перенаправления HTTP для чего? говорит:
Несмотря на то, что коды состояния 303 и 307 были стандартизированы в 1999 г., все еще клиенты, которые не реализуют их правильно. Так же, как с код состояния 308, поэтому рекомендуется придерживаться кода 302. перенаправления, если вам не нужно повторять запрос POST (используйте 307 в этом случае) или знать, что предполагаемые клиенты поддерживают коды 303 и 307.
Итак, один рекомендует использовать 302, а другой рекомендует использовать либо 303, либо 307.
Какова правильная рекомендация?
Я также написал статью об этом, и ответ: это зависит. Каждое перенаправление имеет определенную цель. Почему вы перенаправляете?
Я скопирую соответствующие фрагменты из статьи здесь:
Вы отвечаете на запрос POST
и вместо немедленного возврата статуса хотите перенаправить пользователя на страницу подтверждения, а затем использовать 303 See Other
.
Ресурс переместился на новый путь или в новый домен, и вы хотите убедиться, что любой HTTP-клиент повторяет точно такой же HTTP-запрос в новом местоположении?
Используйте 307 Temporary Redirect
, если перемещение было временным, или 308 Permanent Redirect
, если перемещение было постоянным.
Ресурс переехал, а вас интересует только GET-запрос? (возможно потому что это сайт).
Используйте 302 Found
, если перемещение было временным, или 301 Moved Permanently
, если перемещение было постоянным.
Вы хотите отправить пользователя куда-то еще, но не знаете куда, потому что есть более одного варианта, и вы хотите, чтобы пользователь сам решал:
Используйте 300 Multiple Choices
.
Соответствующие требованиям клиенты поймут любое перенаправление и будут следовать заголовку Location
. Я не могу гарантировать, что есть несовместимые клиенты, но я также не знаю, что это такое, и я не верю, что есть распространенные/популярные клиенты с такими проблемами. Каждое из этих перенаправлений работало очень хорошо для меня, кроме:
300
на самом деле.fetch()
в браузерах для запросов из разных источников, похоже, вообще не работает с перенаправлениями, независимо от кода состояния.