Ответ 1
Обзор 301
, 302
и 307
RFC 7231, текущая ссылка на семантику и содержание протокола HTTP/1.1, определяет код состояния 301
(перемещен постоянно) и 302
(найден), который позволяет изменять метод запроса с POST
на GET
. Эта спецификация также определяет код состояния 307
(временное перенаправление), который не позволяет изменять метод запроса с POST
на GET
.
Смотрите более подробную информацию ниже:
6.4.2. 301 перемещено навсегда
Код состояния
301
(перемещен постоянно) указывает, что целевому ресурсу был назначен новый постоянный URI, и любые будущие ссылки на этот ресурс должны использовать один из вложенных URI. [...]Примечание. По историческим причинам пользовательский агент МОЖЕТ изменить метод запроса с
POST
наGET
для последующего запроса. Если это поведение нежелательно, вместо него можно использовать код состояния307
(временное перенаправление).
Код состояния
302
(Найдено) указывает, что целевой ресурс временно находится под другим URI. Поскольку перенаправление может иногда изменяться, клиент должен продолжать использовать эффективный URI запроса для будущих запросов. [...]Примечание. По историческим причинам пользовательский агент МОЖЕТ изменить метод запроса с
POST
наGET
для последующего запроса. Если это поведение нежелательно, вместо него можно использовать код состояния307
(временное перенаправление).
Код состояния
307
(временное перенаправление) указывает на то, что целевой ресурс временно находится под другим URI, и пользовательский агент НЕ ДОЛЖЕН изменять метод запроса, если он выполняет автоматическое перенаправление на этот URI. Поскольку перенаправление со временем может измениться, клиент должен продолжать использовать исходный эффективный URI запроса для будущих запросов. [...]Примечание. Этот код состояния аналогичен
302
(найдено), за исключением того, что он не позволяет изменить метод запроса сPOST
наGET
. Эта спецификация не определяет эквивалента для301
(Постоянно перемещено) (однако RFC 7238 определяет код состояния308
(Постоянное перенаправление) для этой цели).
Потребность в 308
RFC 7238 был создан для определения кода состояния 308
(перманентное перенаправление), который аналогичен 301
(перманентно перемещен), но не позволяет изменять метод запроса с POST
на GET
.
Код состояния 308
теперь определяется RFC 7538 (который устарел RFC 7238).
Код состояния
308
(постоянное перенаправление) указывает, что целевому ресурсу был назначен новый постоянный URI, и любые будущие ссылки на этот ресурс должны использовать один из вложенных URI. Клиенты с возможностями редактирования ссылок должны автоматически связывать ссылки на эффективный URI запроса с одной или несколькими новыми ссылками, отправленными сервером, где это возможно. [...]Примечание. Этот код состояния аналогичен
301
(постоянно перемещен), за исключением того, что он не позволяет изменить метод запроса сPOST
наGET
.
SE у нас есть следующее:
+-----------+-----------+
| Permanent | Temporary |
+------------------------------------------------------------+-----------+-----------+
| Allows changing the request method from POST to GET | 301 | 302 |
+------------------------------------------------------------+-----------+-----------+
| Doesn't allow changing the request method from POST to GET | 308 | 307 |
+------------------------------------------------------------+-----------+-----------+
Выбор наиболее подходящего кода статуса
Майкл Кропат составил набор диаграмм принятия решений, который помогает определить лучший код состояния для каждой ситуации. См. Следующие коды состояния 2xx
и 3xx
: