13

Manchmal (wenn die Ressource zu oft angefordert wird) unterbreche ich die Präsentation einer (HTML-) Ressource mit einem Captcha. Die Überwachung führt zu keiner Umleitung. Es passiert alles im selben URI.HTTP-Statuscode für Captcha

Ich frage mich jetzt die HTTP-Statuscode meist für diese Anforderungen entsprechen:

  • sollte es semantisch passen.

  • Google sollte verstehen, dass diese Überwachung eine vorübergehende Bedingung ist, die die vorhandene Ressource in ihrem Index nicht beeinträchtigen sollte.

  • Ein Webbrowser zeigt den Antworttext mit dem Captcha an.

Das sind meine Kandidaten, die ich bisher identifiziert:

409 Conflict

Der Antrag nicht aufgrund eines Konflikts mit dem aktuellen Status der Ressource abgeschlossen werden konnte. Dieser Code ist nur in Situationen zulässig, in denen der Benutzer möglicherweise den Konflikt lösen und die Anforderung erneut senden kann. Die Antwortstelle SOLLTE ausreichend Informationen enthalten, damit der Benutzer die Konfliktquelle erkennen kann.

Das klingt perfekt. Der Konfliktstatus kommt von den Clients, die die Ressource zu oft anfordern. Die Antwort enthält auch genügend Informationen, um die Konfliktquelle zu identifizieren und sie zu lösen.

503 Service Unavailable

Der Server ist derzeit nicht in der Lage die Anfrage aufgrund einer vorübergehenden Überlastung [...] des Servers zu behandeln. Die Implikation ist, dass dies eine vorübergehende Bedingung ist [...]. Wenn bekannt, kann die Länge der Verzögerung in einem Retry-After-Header angezeigt werden.

Das klingt mäßig passend. Ich könnte sogar die Länge der Verzögerung kennen und einen solchen Header bereitstellen. Aber mir fehlt hier der Punkt, dass der Benutzer das Problem lösen kann. Außerdem ist der Umfang zu groß (überladene Server vs. überlastete Ressource).

Antwort

7

Sie können den Statuscode 429, definiert in http://tools.ietf.org/html/rfc6585#section-4, berücksichtigen.

+0

Ich dachte, dass 401 eine angemessene Antwort wäre. Captcha ist eine Form der Authentifizierung mit der Absicht, die Menschlichkeit des Controllers des Benutzeragenten zu authentifizieren. Ich schaue, was in der WWW-Authenticate-Header liefern, aber ich werde mit starten WWW-Authenticate: X-Captcha – John

+0

Nun, 401 impliziert das Vorhandensein eines definierten Authentifizierungsschemas. Stellen Sie kein Schema zusammen, nur um 401 zu verwenden. –

+1

Der RFC erfordert, dass eine Herausforderung dargestellt wird, aber es erfordert nicht, dass alle Benutzeragenten die Herausforderung verstehen. Das Beispiel stellt eine Herausforderung für ein System dar, das in den Standards nicht vorhanden ist, so dass ich zu der Annahme gelangt, dass es sinnvoll ist, wenn die Anwendung das Schema nutzen kann. Als ich die Spezifikation für 429 gelesen habe, scheint der Client keine Anfragen mehr zu stellen. Das ist nicht das gewünschte Verhalten: Wir möchten, dass der Client die Anfrage nach der Authentifizierung erneut übermittelt. Youtube verwendet 402, wenn zu viele Anforderungen vorhanden sind. Dieser Status ist jedoch für zukünftige Verwendung reserviert. – John