Was ist der Unterschied zwischen den HTTP 301- und 308-Statuscodes?

137

Was ist der Unterschied zwischen HTTP- 301und 308Statuscodes?

  • 301 (Permanent verschoben): Diese und alle zukünftigen Anforderungen sollten an die angegebene URI gerichtet werden.

  • 308 (Permanente Weiterleitung): Die Anforderung und alle zukünftigen Anforderungen sollten unter Verwendung einer anderen URI wiederholt werden.

Sie scheinen ähnlich zu sein.

Alexander Drobyshevsky
quelle
Kein Code 308 in tools.ietf.org/html/rfc2616 und tools.ietf.org/html/rfc6585 , daher muss die Frage an den Erfinder dieses nicht standardmäßigen Codes gerichtet werden.
KonstantinL
4
Es gibt die Spezifikation RFC 7538, daher handelt es sich um echten HTTP-Code
Alexander Drobyshevsky
2
Nun, tools.ietf.org/html/rfc7538 : Hinweis: Dieser Statuscode ähnelt 301, außer dass die Anforderungsmethode nicht von POST auf GET geändert werden kann.
KonstantinL
4
Verwenden Sie den RFC 2616 nicht als Referenz. Es wurde von den RFCs 7230-35 überholt.
Cassiomolin

Antworten:

257

Eine Übersicht über 301, 302und307

Die RFC 7231 , die Stromreferenz für die Semantik und den Inhalt der HTTP / 1.1 - Protokolls, definiert den 301(fest verschoben) und 302(gefunden) Statuscode, der die Anforderung von Verfahren erlaubt geändert werden , POSTum GET. Diese Spezifikation definiert auch den 307Statuscode (Temporäre Umleitung), mit dem die Anforderungsmethode nicht von POSTnach geändert werden kann GET.

Weitere Details finden Sie unten:

6.4.2. 301 Dauerhaft verschoben

Der 301Statuscode (permanent verschoben) gibt an, dass der Zielressource ein neuer permanenter URI zugewiesen wurde und alle zukünftigen Verweise auf diese Ressource einen der beigefügten URIs verwenden sollten. [...]

Hinweis: Aus historischen Gründen kann ein Benutzeragent die Anforderungsmethode für die nachfolgende Anforderung von POSTauf ändern GET. Wenn dieses Verhalten unerwünscht ist, 307kann stattdessen der Statuscode (Temporäre Umleitung) verwendet werden.

6.4.3. 302 gefunden

Der 302Statuscode (Gefunden) gibt an, dass sich die Zielressource vorübergehend unter einem anderen URI befindet. Da die Umleitung gelegentlich geändert werden kann, sollte der Client den effektiven Anforderungs-URI weiterhin für zukünftige Anforderungen verwenden. [...]

Hinweis: Aus historischen Gründen kann ein Benutzeragent die Anforderungsmethode für die nachfolgende Anforderung von POSTauf ändern GET. Wenn dieses Verhalten unerwünscht ist, 307kann stattdessen der Statuscode (Temporäre Umleitung) verwendet werden.

6.4.7. 307 Temporäre Weiterleitung

Der 307Statuscode (Temporäre Umleitung) gibt an, dass sich die Zielressource vorübergehend unter einem anderen URI befindet und der Benutzeragent die Anforderungsmethode NICHT ändern darf, wenn er eine automatische Umleitung zu diesem URI durchführt. Da sich die Umleitung im Laufe der Zeit ändern kann, sollte der Client weiterhin den ursprünglichen effektiven Anforderungs-URI für zukünftige Anforderungen verwenden. [...]

Hinweis: Dieser Statuscode ähnelt 302(Gefunden), mit der Ausnahme, dass die Anforderungsmethode nicht von POSTauf geändert werden kann GET. Diese Spezifikation definiert kein gleichwertiges Gegenstück für 301(dauerhaft verschoben) ( RFC 7238 definiert jedoch den Statuscode 308 (permanente Umleitung) für diesen Zweck).

Der Bedarf an 308

Der RFC 7238 wurde erstellt, um den 308Statuscode (Permanent Redirect) zu definieren, der (Permanent 301verschoben) ähnlich ist, jedoch keine Änderung der Anforderungsmethode von POSTnach zulässt GET.

Der 308Statuscode wird jetzt vom RFC 7538 definiert (der den RFC 7238 überholt hat ).

3. 308 Permanente Weiterleitung

Der 308Statuscode (Permanent Redirect) gibt an, dass der Zielressource ein neuer permanenter URI zugewiesen wurde und alle zukünftigen Verweise auf diese Ressource einen der beiliegenden URIs verwenden sollten. Clients mit Linkbearbeitungsfunktionen sollten Verweise auf den effektiven Anforderungs-URI nach Möglichkeit automatisch mit einem oder mehreren der neuen vom Server gesendeten Verweise verknüpfen. [...]

Hinweis: Dieser Statuscode ähnelt 301(dauerhaft verschoben), mit der Ausnahme, dass die Anforderungsmethode nicht von POSTauf geändert werden kann GET.

Se wir haben das folgende:

                                                             +-----------+-----------+
                                                             | 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       |
+------------------------------------------------------------+-----------+-----------+

Auswahl des am besten geeigneten Statuscodes

Michael Kropat hat eine Reihe von Entscheidungsdiagrammen zusammengestellt , mit deren Hilfe der beste Statuscode für jede Situation ermittelt werden kann. Siehe folgende für 2xxund 3xxStatuscodes:

Auswahl eines 2xx- oder 3xx-Statuscodes

Cassiomolin
quelle
3
Da die Frage speziell über die destinction zwischen 301 und 308 war, könnten Sie geben etwas mehr Erklärung auf: „nicht erlaubt nicht die Anforderungsmethode von geändert werden , POSTum GET ? Würde dies bedeuten, dass ein veröffentlichtes Formular nicht verarbeitet werden kann, ein neues Formular jedoch möglicherweise auf dem Server gespeichert und bei einer nächsten Anfrage veröffentlicht wird?
R. Schreurs
1
Dieser Entwurf einer Spezifikation ( tools.ietf.org/id/draft-hunt-http-rest-redirect-00.html ) schlägt vor, dass ReSTful-Dienste 308 auch für GETs verwenden sollten. "HTTP-Umleitungscodes 301-306 sollten NICHT verwendet werden, es sei denn, der Dienstanbieter weiß, dass der Client tatsächlich ein Benutzeragent ist." Dies ist jedoch nur ein Entwurf. Ich bin mir nicht sicher, ob / wann es akzeptiert wird.
Bruce Adams
1
Dieser Beitrag, der-definitive-guide-to-get-vs-post , stellt klar , warum eine so dass POST(Safe) Anfrage wird geändert in eine zu GET, dass Daten (unsicher wird durch Zugabe zu der URL übergeben - und Urls kann gespeichert werden - einschließlich Passwörtern) kann ein Sicherheitsproblem darstellen und sollte im Allgemeinen vermieden werden, es sei denn, Sie wissen , dass Änderungen sicher sind. Heutzutage scheint es allgemein unterstützt und bevorzugt zu werden, 307, 308 gegenüber 301, 302 zu verwenden. Sie sollten dies jedoch überprüfen.
SherylHohman
1
Mnemonik 308ist wie eine seitliche Unendlichkeit, also permanente Umleitung, und ändern Sie niemals die Anforderungsmethode - es ist auch ein permanenter, fester Anforderungstyp. Dann 307ist 1Schritt unten - permanente / Keep-Anforderungsmethode (Get / Post), aber Weiterleiten an einen temporären Ort: 7 - sieht aus wie "Linkskurve" oder temporärer Umweg, und 7 sieht auch ähnlich aus wie k, also "behalten" Sie die Anforderungsmethode.
SherylHohman
Sie haben vergessen, Resume Incomplete zu erwähnen .
Knu