Wenn ein Benutzer nicht angemeldet ist und versucht, auf eine Seite zuzugreifen, für die eine Anmeldung erforderlich ist, wie lautet der richtige HTTP-Statuscode für eine Umleitung zur Anmeldeseite?
Ich frage , weil keiner der vom W3C festgelegten 3xx-Antwortcodes den Anforderungen zu entsprechen scheint :
10.3.1 300 Mehrfachauswahl
Die angeforderte Ressource entspricht einer beliebigen Reihe von Darstellungen mit jeweils einem bestimmten Standort, und es werden agentengesteuerte Verhandlungsinformationen (Abschnitt 12) bereitgestellt, damit der Benutzer (oder Benutzeragent) eine bevorzugte Darstellung auswählen und diese umleiten kann Anfrage an diesen Ort.
Sofern es sich nicht um eine HEAD-Anforderung handelt, MUSS die Antwort eine Entität enthalten, die eine Liste von Ressourcenmerkmalen und Standorten enthält, aus denen der Benutzer oder Benutzeragent die am besten geeignete auswählen kann. Das Entitätsformat wird durch den Medientyp angegeben, der im Headerfeld Inhaltstyp angegeben ist. Abhängig vom Format und den Fähigkeiten von
Der Benutzeragent kann die Auswahl der am besten geeigneten Auswahl automatisch durchführen. Diese Spezifikation definiert jedoch keinen Standard für eine solche automatische Auswahl.
Wenn der Server eine bevorzugte Darstellungsauswahl hat, MUSS er den spezifischen URI für diese Darstellung in das Feld Standort aufnehmen. Benutzeragenten KÖNNEN den Feldwert Standort für die automatische Umleitung verwenden. Diese Antwort kann zwischengespeichert werden, sofern nicht anders angegeben.
10.3.2 301 Permanent verschoben
Der angeforderten Ressource wurde eine neue permanente URI zugewiesen, und alle zukünftigen Verweise auf diese Ressource sollten eine der zurückgegebenen URIs verwenden. Clients mit Linkbearbeitungsfunktionen sollten Verweise auf den Request-URI nach Möglichkeit automatisch mit einem oder mehreren der neuen vom Server zurückgegebenen Verweise verknüpfen. Diese Antwort kann zwischengespeichert werden, sofern nicht anders angegeben.
Die neue permanente URI MUSS durch das Feld Standort in der Antwort angegeben werden. Sofern die Anforderungsmethode nicht HEAD war, SOLLTE die Entität der Antwort eine kurze Hypertextnotiz mit einem Hyperlink zu den neuen URIs enthalten.
Wenn der 301-Statuscode als Antwort auf eine andere Anforderung als GET oder HEAD empfangen wird, darf der Benutzeragent die Anforderung NICHT automatisch umleiten, es sei denn, dies kann vom Benutzer bestätigt werden, da dies die Bedingungen ändern kann, unter denen die Anforderung ausgegeben wurde.
Note: When automatically redirecting a POST request after receiving a 301 status code, some existing HTTP/1.0 user agents will erroneously change it into a GET request.
10.3.3 302 Gefunden
Die angeforderte Ressource befindet sich vorübergehend unter einem anderen URI. Da die Umleitung gelegentlich geändert werden kann, sollte der Client den Anforderungs-URI weiterhin für zukünftige Anforderungen verwenden. Diese Antwort kann nur zwischengespeichert werden, wenn dies durch ein Cache-Control- oder Expires-Headerfeld angezeigt wird.
Der temporäre URI sollte durch das Feld Standort in der Antwort angegeben werden. Sofern die Anforderungsmethode nicht HEAD war, SOLLTE die Entität der Antwort eine kurze Hypertextnotiz mit einem Hyperlink zu den neuen URIs enthalten.
Wenn der 302-Statuscode als Antwort auf eine andere Anforderung als GET oder HEAD empfangen wird, darf der Benutzeragent die Anforderung NICHT automatisch umleiten, es sei denn, dies kann vom Benutzer bestätigt werden, da dies die Bedingungen ändern kann, unter denen die Anforderung ausgegeben wurde.
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
waren eine 303-Antwort, die unabhängig von der ursprünglichen Anforderungsmethode ein GET für den Feldwert "Standort" durchführte. Die Statuscodes 303 und 307 wurden für Server hinzugefügt, die eindeutig klarstellen möchten, welche Art von Reaktion vom Client erwartet wird.
10.3.4 303 Siehe Andere
Die Antwort auf die Anforderung kann unter einem anderen URI gefunden werden und sollte mit einer GET-Methode für diese Ressource abgerufen werden. Diese Methode dient hauptsächlich dazu, dass die Ausgabe eines POST-aktivierten Skripts den Benutzeragenten zu einer ausgewählten Ressource umleitet. Der neue URI ist keine Ersatzreferenz für die ursprünglich angeforderte Ressource. Die 303-Antwort darf NICHT zwischengespeichert werden, aber die Antwort auf die zweite (umgeleitete) Anforderung kann zwischengespeichert werden.
Die verschiedenen URIs MÜSSEN durch das Feld Standort in der Antwort angegeben werden. Sofern die Anforderungsmethode nicht HEAD war, SOLLTE die Entität der Antwort eine kurze Hypertextnotiz mit einem Hyperlink zu den neuen URIs enthalten.
Note: Many pre-HTTP/1.1 user agents do not understand the 303 status. When interoperability with such clients is a concern, the 302 status code may be used instead, since most user agents react to a 302 response as described here for 303.
10.3.5 304 Nicht geändert
Wenn der Client eine bedingte GET-Anforderung ausgeführt hat und der Zugriff zulässig ist, das Dokument jedoch nicht geändert wurde, MUSS der Server mit diesem Statuscode antworten. Die Antwort 304 DARF KEINEN Nachrichtentext enthalten und wird daher immer durch die erste leere Zeile nach den Headerfeldern beendet.
Die Antwort MUSS die folgenden Headerfelder enthalten:
- Date, unless its omission is required by section 14.18.1 If a
Der taktlose Ursprungsserver befolgt diese Regeln, und Proxys und Clients fügen jeder Antwort, die ohne eine Antwort empfangen wurde, ein eigenes Datum hinzu (wie bereits in [RFC 2068], Abschnitt 14.19 angegeben). Die Caches funktionieren ordnungsgemäß.
- ETag and/or Content-Location, if the header would have been sent in a 200 response to the same request - Expires, Cache-Control, and/or Vary, if the field-value might differ from that sent in any previous response for the same variant If the conditional GET used a strong cache validator (see
Abschnitt 13.3.3), die Antwort sollte keine anderen Entity-Header enthalten. Andernfalls (dh das bedingte GET hat einen schwachen Validator verwendet) darf die Antwort KEINE anderen Entitätsheader enthalten. Dies verhindert Inkonsistenzen zwischen zwischengespeicherten Entitätskörpern und aktualisierten Headern.
Wenn eine 304-Antwort eine Entität anzeigt, die derzeit nicht zwischengespeichert ist, MUSS der Cache die Antwort ignorieren und die Anforderung ohne die Bedingung wiederholen.
Wenn ein Cache eine empfangene 304-Antwort verwendet, um einen Cache-Eintrag zu aktualisieren, MUSS der Cache den Eintrag aktualisieren, um alle neuen Feldwerte wiederzugeben, die in der Antwort angegeben sind.
10.3.6 305 Proxy verwenden
Auf die angeforderte Ressource MUSS über den im Feld Standort angegebenen Proxy zugegriffen werden. Das Feld Standort gibt den URI des Proxys an. Es wird erwartet, dass der Empfänger diese einzelne Anforderung über den Proxy wiederholt. 305 Antworten MÜSSEN nur von Ursprungsservern generiert werden.
Note: RFC 2068 was not clear that 305 was intended to redirect a single request, and to be generated by origin servers only. Not observing these limitations has significant security consequences.
10.3.7 306 (nicht verwendet)
Der 306-Statuscode wurde in einer früheren Version der Spezifikation verwendet, wird nicht mehr verwendet und der Code ist reserviert.
10.3.8 307 Temporäre Weiterleitung
Die angeforderte Ressource befindet sich vorübergehend unter einem anderen URI. Da die Umleitung gelegentlich geändert werden kann, sollte der Client den Anforderungs-URI weiterhin für zukünftige Anforderungen verwenden. Diese Antwort kann nur zwischengespeichert werden, wenn dies durch ein Cache-Control- oder Expires-Headerfeld angezeigt wird.
Der temporäre URI sollte durch das Feld Standort in der Antwort angegeben werden. Sofern die Anforderungsmethode nicht HEAD war, sollte die Entität der Antwort eine kurze Hypertextnotiz mit einem Hyperlink zu den neuen URIs enthalten, da viele Benutzeragenten vor HTTP / 1.1 den 307-Status nicht verstehen. Daher sollte der Hinweis die Informationen enthalten, die ein Benutzer benötigt, um die ursprüngliche Anforderung für den neuen URI zu wiederholen.
Wenn der 307-Statuscode als Antwort auf eine andere Anforderung als GET oder HEAD empfangen wird, darf der Benutzeragent die Anforderung NICHT automatisch umleiten, es sei denn, dies kann vom Benutzer bestätigt werden, da dies die Bedingungen ändern kann, unter denen die Anforderung ausgegeben wurde.
Ich benutze vorerst 302, bis ich die richtige Antwort finde .
Update & Fazit:
HTTP 302 ist besser, da bekannt ist, dass es die beste Kompatibilität mit Clients / Browsern aufweist.
quelle
Antworten:
Ich würde sagen,
303 siehe andere302 Gefunden:passt meiner Meinung nach am besten zu einer Login-Seite. Ich überlegte zunächst,
303 see other
was genauso gut funktionieren würde. Nach einigem Nachdenken, würde ich sagen ,302 Found
ist mehr passend , weil die angeforderte Ressource wurde gefunden, gibt es nur eine andere Seite zu durchlaufen , bevor sie zugegriffen werden kann. Die Antwort wird standardmäßig nicht zwischengespeichert, was ebenfalls in Ordnung ist.quelle
302
oder verwenden303
, außer dass dies302
besser bekannt ist. Ich finde den Detaillierungsgrad lobenswert und es ist immer gut, die Dinge richtig zu machen, aber zu viel Aufwand kann in diesem speziellen Bereich zwecklos sein.Dies ist ein Missbrauch des HTTP-Umleitungsmechanismus. Wenn der Benutzer nicht autorisiert ist, muss Ihre App zurückkehren
401 Unauthorized
. Falls der Benutzer autorisiert ist, aber keinen Zugriff auf die angeforderte Ressource hat,403 Forbidden
muss er zurückgegeben werden.Sie sollten die Weiterleitung auf der Clientseite durchführen, z. B. per Javascript. Statuscode für die Umleitung, da die erforderliche Autorisierung nicht vorhanden ist . Die Verwendung von 30x entspricht nicht HTTP.
Wie man über HTTP-Statuscodes nachdenkt von Mark Nottingham
401 Unauthorized
Für den Statuscode muss einWWW-Authenticate
Header vorhanden sein, der verschiedene Authentifizierungstypen unterstützt:Inhaber, OAuth, Basic, Digest, Cookie usw.
quelle
A server generating a 401 (Unauthorized) response MUST send a WWW-Authenticate header field
( RFC ) geeignet , und nicht alle Anmeldesysteme verwenden diesen Header.Ich denke, die geeignete Lösung ist der HTTP 401-Header (nicht autorisiert).
http://en.wikipedia.org/wiki/HTTP_codes#4xx_Client_Error
Der Zweck dieses Headers ist genau dies. Anstatt auf eine Anmeldeseite umzuleiten, lautet der richtige Vorgang jedoch wie folgt:
Dies ist eine gute Vorgehensweise, z. B. das Bereitstellen einer nützlichen 404-Seite mit Sitemap-Links und einem Suchformular.
Wir sehen uns.
quelle