Was ist der korrekte HTTP-Antwort zu senden Sie für Anfragen, eine SSL - /TLS
-
23-09-2019 - |
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?
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
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