Beispiele von 302 vs 303

22

Was ist der Unterschied zwischen a 302und 303response?

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

  • 10.3.3 302 gefunden
  • 10.3.4 303 Siehe Andere

Sind diese austauschbar oder warum würde man sie übereinander verwenden? Könnten Sie bitte einen Anwendungsfall angeben, wann einer verwendet werden würde (und der andere nicht)?

David542
quelle

Antworten:

35

Die Beschreibung auf der Seite, auf die Sie verlinkt haben, scheint den beabsichtigten Zweck ziemlich genau zu beschreiben:

Eine 302-Umleitung gibt an, dass die Umleitung temporär ist. Clients sollten bei zukünftigen Anforderungen die ursprüngliche URL erneut aufrufen.

Eine 303-Umleitung soll eine POSTAnforderung an eine GETRessource umleiten (andernfalls geht der Client davon aus, dass die Anforderungsmethode für den neuen Speicherort dieselbe ist wie für die ursprüngliche Ressource).

Wenn Sie einen Client als Teil Ihrer Webanwendung umleiten, aber davon ausgehen, dass er immer bei der Webanwendung gestartet wird (z. B. ein URL-Shortener), ist eine 302-Umleitung sinnvoll. A 303 - Weiterleitung wird verwendet , wenn Sie empfangen POSTDaten von einem Client (zB ein Formular - Vorlage) , und Sie wollen , dass sie eine neue Web - Seite umgeleitet werden abgerufen werden unter Verwendung GETanstelle von POST( zum Beispiel eine Standard - Seite Anfrage).

Beachten Sie jedoch diesen Hinweis in den Statuscode-Definitionen - die meisten Clients tun dasselbe für eine 302 oder 303:

  Note: RFC 1945 and RFC 2068 specify that the client is not allowed
  to change the method on the redirected request.  However, most
  existing user agent implementations treat 302 as if it were a 303
  response, performing a GET on the Location field-value regardless
  of the original request method. The status codes 303 and 307 have
  been added for servers that wish to make unambiguously clear which
  kind of reaction is expected of the client.
larsks
quelle
4
Klar aber falsch. Eine 303-Umleitung ist nicht permanent. Der RFC gibt an, dass die 303-Antwort NICHT zwischengespeichert werden darf . Die Beschreibung, die Sie hier angegeben haben, entspricht einer 301-Weiterleitung.
Ladadadada
2
Mea culpa. Ich hatte 301 und 303 rückwärts. Ich habe die Antwort aktualisiert.
larsks
Es gibt jetzt 308
Miranda
15

Es gibt (derzeit) vier verschiedene Weiterleitungstypen. Ursprünglich gab es nur zwei, aber die meisten Clients haben die 302-Umleitung falsch implementiert, sodass zwei weitere hinzugefügt wurden, um den Unterschied zwischen den beiden möglichen Verhaltensweisen beim Empfang einer 302 zu verdeutlichen.

Der RFC, mit dem Sie verknüpft haben, gibt dies im Abschnitt zu 302 Weiterleitungen an:

  Note: RFC 1945 and RFC 2068 specify that the client is not allowed
  to change the method on the redirected request.  However, most
  existing user agent implementations treat 302 as if it were a 303
  response, performing a GET on the Location field-value regardless
  of the original request method. The status codes 303 and 307 have
  been added for servers that wish to make unambiguously clear which
  kind of reaction is expected of the client.
  1. Eine 301-Umleitung ist eine permanente Umleitung. Es kann zwischengespeichert werden, und alle Lesezeichen für diese URL sollten so aktualisiert werden, dass sie auf die neue URL verweisen.
  2. Eine 302-Umleitung ist eine temporäre Umleitung. Sie kann standardmäßig nicht zwischengespeichert werden und sollte jedes Mal neu angefordert werden (Sie können dies jedoch durch Caching-Header überschreiben). Die Folgeanforderung sollte dieselbe Methode (POST, GET, CONNECT, PUT, DELETE usw.) wie die ursprüngliche Anforderung verwenden, und für alle anderen Anforderungen als GET und HEAD sollte der Client den Benutzer vor dem Absenden der Anforderung auffordern. Dies ist der Teil, den die Clients falsch verstanden haben, und die meisten ändern die Methode für die Folgeanforderung auf GET, unabhängig von der ursprünglichen Methode.
  3. Eine 303-Umleitung entspricht einer 302-Umleitung, mit der Ausnahme, dass die Folgeanforderung jetzt explizit in eine GET-Anforderung geändert wird und keine Bestätigung erforderlich ist.
  4. Eine 307-Umleitung entspricht einer 302-Umleitung, mit der Ausnahme, dass die Folgeanforderung jetzt explizit der ursprünglichen Anforderung entspricht und vom Benutzer eine Bestätigung für andere Anforderungsmethoden als GET und HEAD eingeholt werden muss.

Ältere Clients verstehen die 303-Umleitung möglicherweise nicht. Alles, was eine HTTP / 1.1-Anfrage macht, sollte eine 303-Antwort verstehen.

Es ist möglich, 300 und 305 Antworten als Weiterleitungen zu betrachten, was bedeutet, dass es sechs verschiedene Typen gibt.

Ladadadada
quelle
0

Die verwendeten Weiterleitungstypen (301.302.303 ...) haben großen Einfluss darauf, wie Suchmaschinen Inhalte indizieren und bewerten. Einige Spinnen lehnen es möglicherweise sogar ab, vorübergehend umgeleiteten Inhalt zu indizieren. Details finden Sie in diverser SEO-Literatur ...

Rackandboneman
quelle