Временное перенаправление HTTP - следует ли использовать 302 или один из 303 и 307

Ответ Боба Амана о различии между кодами перенаправления 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.

Какова правильная рекомендация?

Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание ресурсов API Laravel: Советы по производительности и масштабируемости
Создание API-ресурса Laravel может быть непростой задачей. Она требует глубокого понимания возможностей Laravel и лучших практик, чтобы обеспечить...
Как создать простое погодное приложение на Python с API OpenWeatherMap
Как создать простое погодное приложение на Python с API OpenWeatherMap
Этот учебник проведет вас через процесс создания простого погодного приложения с помощью Python и OpenWeatherMap API.
Пакеты Java
Пакеты Java
Пакет java - это группа классов, интерфейсов и подпакетов схожего типа. Думайте об этом как о папке в каталоге файлов. Мы используем пакеты, чтобы...
Как использовать API парсинга квитанций с помощью JavaScript за 5 минут?
Как использовать API парсинга квитанций с помощью JavaScript за 5 минут?
В этом руководстве вы узнаете, как использовать API парсинга квитанций за 5 минут с помощью JavaScript. Eden AI предоставляет простой и удобный для...
0
0
475
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я также написал статью об этом, и ответ: это зависит. Каждое перенаправление имеет определенную цель. Почему вы перенаправляете?

Я скопирую соответствующие фрагменты из статьи здесь:

Вы отвечаете на запрос POST и вместо немедленного возврата статуса хотите перенаправить пользователя на страницу подтверждения, а затем использовать 303 See Other.

Ресурс переместился на новый путь или в новый домен, и вы хотите убедиться, что любой HTTP-клиент повторяет точно такой же HTTP-запрос в новом местоположении?

Используйте 307 Temporary Redirect, если перемещение было временным, или 308 Permanent Redirect, если перемещение было постоянным.

Ресурс переехал, а вас интересует только GET-запрос? (возможно потому что это сайт).

Используйте 302 Found, если перемещение было временным, или 301 Moved Permanently, если перемещение было постоянным.

Вы хотите отправить пользователя куда-то еще, но не знаете куда, потому что есть более одного варианта, и вы хотите, чтобы пользователь сам решал:

Используйте 300 Multiple Choices.

Соответствующие требованиям клиенты поймут любое перенаправление и будут следовать заголовку Location. Я не могу гарантировать, что есть несовместимые клиенты, но я также не знаю, что это такое, и я не верю, что есть распространенные/популярные клиенты с такими проблемами. Каждое из этих перенаправлений работало очень хорошо для меня, кроме:

  1. Никто ничего не делает с 300 на самом деле.
  2. Использование функции fetch() в браузерах для запросов из разных источников, похоже, вообще не работает с перенаправлениями, независимо от кода состояния.

Другие вопросы по теме