Frage

Ich bin der Gestaltung einer RESTful-API, wo einige Anrufe sind öffentlich über HTTP, und einige benötigen einen API-Schlüssel und die Verschlüsselung über HTTPS.Ich bin denken an, was Antwort-code gesendet werden soll, wenn eine HTTP-Anfrage an eine der privaten Ressourcen.Bisher nur eine, springt an mir ist 412 - Precondition Failed, der standard gibt an, dass die Voraussetzung ist, die durch den Antragsteller nicht auf dem server.

Ist es eine entsprechende Antwort-code, der für diese Bedingung oder muss ich nur geben in und tun 400?

War es hilfreich?

Lösung

Der sicherste Weg, um Kraft-HTTP-client für die Verwendung von HTTPS ist HTTP Strict-Transport-Security.

Zuvor einen gemeinsamen Vorschlag war, um die drop-Verbindung, aber diese die Praxis wurde entfernt Gunsten von HSTS (OWASP-website).

Andere Tipps

Ich kann nicht sagen, ob dies ist weitgehend akzeptiert, die von HTTP-clients, spreche aber streng RFC sollte der server antwortet mit:

HTTP/1.1 426 Upgrade Required
Upgrade: TLS/1.0, HTTP/1.1
Connection: Upgrade

Quelle:
http://tools.ietf.org/html/rfc2817#section-4.2

Der entsprechende Fehler-code zurückkehren würde ähnlich sein 403.4 - SSL erforderlich.

Obwohl nicht explizit dokumentiert ist, in den RFC für HTTP 1.1, dieses Verhalten entspricht den genannten Anforderungen gibt es:

Der server verstanden, die Anfrage, aber weigert sich, es zu erfüllen.Die Autorisierung wird nicht helfen und die Anfrage SOLLTE NICHT wiederholt werden.Wenn die request-Methode wurde nicht KOPF und dem server wünschen, um öffentlich zu machen, warum die Anforderung nicht erfüllt, wird es beschreiben SOLL, der Grund für die Verweigerung in der Einheit.Wenn der server nicht wünschen, diese Informationen an den client, der status-code 404 (Nicht Gefunden) kann stattdessen verwendet werden.

Indem Sie Ihre eigenen subcode (wie bei der SSL-Beispiel) kann in einigen Fällen nützlich sein, aber da dieser subcode wäre nicht sinnvoll ist, an Dritte, die ich empfehlen würde, gegen ihn.

So, das endgültige Fehlermeldung wäre so etwas wie "403 - Private Ressource".Beachten Sie, dass, selbst im Falle einer fehlenden API key, "401 - Unauthorized" sollte nicht verwendet werden, es sei denn, der API-Schlüssel kann tatsächlich übertragen werden, die in einem WWW-Authenticate-header-Feld.

Zurückgeben eines 403 mit dem Grund-Satz "HTTPS Erforderlich"scheint wie eine praktische option, und das, was ich benutze.

finden https://en.wikipedia.org/wiki/HTTP_403

Umleiten einer REST-Api ist nicht eine gute Idee, vor allem, als Sie keine Ahnung haben, wie oder was verbraucht Ihre service.

Senden Sie einfach eine Umleitung auf die entsprechenden https:URI.

UPDATE

Das ist eine falsche Antwort - siehe Kommentare unten

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top