Question Quelle est la réponse HTTP appropriée à envoyer pour les demandes nécessitant SSL / TLS


Je conçois une API RESTful dans laquelle certains appels sont publics via HTTP, et certains nécessitent une clé API et un cryptage via HTTPS. Je délibère sur le code de réponse à envoyer si une requête HTTP est envoyée à l'une des ressources privées. Jusqu'à présent, le seul qui me saute aux yeux est 412 - Echec de la condition préalable, mais la norme indique que la condition préalable est imposée par le demandeur et non par le serveur.

Existe-t-il un code de réponse approprié pour cette condition ou dois-je simplement céder et faire 400?


43
2018-03-31 16:43


origine


Réponses:


Le moyen le plus sûr de forcer le client HTTP à utiliser HTTPS est Sécurité de transport HTTP stricte.

Auparavant, une suggestion commune était de supprimer la connexion, mais cette la pratique a été supprimée en faveur de HSTS (Site Web OWASP).


7
2018-01-31 17:03



Je ne peux pas dire si cela est largement accepté par les clients HTTP, mais en parlant strictement de la RFC, le serveur devrait répondre avec:

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

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


25
2018-03-31 20:06



Le code d'erreur approprié à renvoyer serait similaire à 403.4 - SSL requis.

Bien que non explicitement documenté dans le RFC pour HTTP 1.1, ce comportement correspond aux exigences décrites ici:

Le serveur a compris la demande, mais refuse de la satisfaire. L'autorisation ne va pas aider et la demande NE DOIT PAS être répétée. Si la méthode de requête n'était pas HEAD et que le serveur souhaitait rendre publique la raison pour laquelle la demande n'a pas été satisfaite, il DEVRAIT décrire la raison du refus dans l'entité. Si le serveur ne souhaite pas mettre ces informations à la disposition du client, le code d'état 404 (non trouvé) peut être utilisé à la place.

Ajouter votre propre sous-code (comme dans l'exemple SSL) pourrait être utile dans certains cas, mais comme ce sous-code ne serait pas significatif pour des tiers, je le déconseillerais.

Donc, votre message d'erreur final serait quelque chose comme "403 - Ressource privée". Notez que, même dans le cas d'une clé d'API manquante, "401 - Unauthorized" ne devrait pas être utilisé, à moins que votre clé d'API ne soit réellement transmise dans un champ d'en-tête WWW-Authenticate.


5
2018-03-31 16:53



Retourner un 403 avec la phrase de raison "HTTPS requis"semble être une option pratique et ce que j'utilise.

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

Redirection d'un REST Api n'est pas une bonne idée, d'autant plus que vous n'avez aucune idée de comment et de ce qui consomme votre service.


4
2018-01-20 11:57



Il suffit d'envoyer une redirection vers le https correspondant: URI.

METTRE À JOUR

C'est une mauvaise réponse - voir les commentaires ci-dessous


0
2018-03-31 21:21