Огляд 301, 302і307
RFC 7231 , поточна посилання для семантики і змісту / 1.1 протоколу HTTP, визначає 301(переміщено) і 302код (Знайдено) статус, який дозволяє метод запиту бути змінений з POSTдо GET. Ця специфікація також визначає 307(статус тимчасового перенаправлення) коду стану, який не дозволяє змінювати метод запиту з POSTна GET.
Детальніше див. Нижче:
6.4.2. 301 Переїхав постійно
Код стану 301(переміщений постійно) вказує на те, що цільовому ресурсу було призначено новий постійний URI, і будь-які майбутні посилання на цей ресурс повинні використовувати один із доданих URI. [...]
Примітка. З історичних причин агент користувача МОЖЕ змінити метод запиту з POSTна GETнаступний запит. Якщо така поведінка небажана, 307замість цього може використовуватися код статусу (Тимчасовий переспрямовування).
6.4.3. 302 Знайдено
Код стану 302(знайдено) вказує, що цільовий ресурс тимчасово знаходиться під іншим URI. Оскільки перенаправлення може бути змінено в деяких випадках, клієнт повинен продовжувати використовувати ефективний URI запиту для майбутніх запитів. [...]
Примітка. З історичних причин агент користувача МОЖЕ змінити метод запиту з POSTна GETнаступний запит. Якщо така поведінка небажана, 307замість цього може використовуватися код статусу (Тимчасовий переспрямовування).
6.4.7. 307 Тимчасовий перенаправлення
Код 307статусу (Тимчасовий перенаправлення) вказує, що цільовий ресурс тимчасово знаходиться під іншим URI, а агент користувача НЕ повинен змінювати метод запиту, якщо він виконує автоматичне перенаправлення на цей URI. Оскільки перенаправлення може змінитися з часом, клієнт повинен продовжувати використовувати оригінальний ефективний URI запиту для майбутніх запитів. [...]
Примітка: Цей код статусу схожий на 302(Знайдено), за винятком того, що він не дозволяє змінювати метод запиту з POSTна GET. Ця специфікація не визначає еквівалентного аналога для 301(Переміщений постійно) ( проте RFC 7238 , 308
для цієї мети , визначає код статусу (Постійна перенаправлення)).
Потреба в 308
RFC 7238 був створений , щоб визначити 308(Permanent Redirect) код статусу, який схожий на 301(переміщено) , але не дозволяє метод запиту буде змінений з POSTдо GET.
Код 308стану тепер визначається RFC 7538 (що застаріло RFC 7238 ).
3. 308 Постійний перенаправлення
Код 308статусу (Постійна перенаправлення) вказує на те, що цільовому ресурсу було призначено новий постійний URI, і будь-які майбутні посилання на цей ресурс повинні використовувати один із доданих URI. Клієнти, що мають можливості редагування посилань, повинні, коли це можливо, автоматично перенаправляти посилання на ефективний URI запиту на одну або кілька нових посилань, що надсилаються сервером. [...]
Примітка: Цей код статусу схожий на 301(переміщений постійно), за винятком того, що він не дозволяє змінювати метод запиту з
POSTна GET.
У нас є наступне:
+-----------+-----------+
| 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коди статусу:
