Est une application HTTP qui envoie un Content-Length ou Transfer-Encoding avec 204 Pas de réponse contenu brisé?
-
06-09-2019 - |
Question
Je ne peux pas dire de RFC 2616 si un client HTTP doit accepter un 204 Aucune réponse de contenu qui comprend Content-Length: 0 ou Transfer-Encoding: chunked têtes. Ces en-têtes semblent briser certains clients HTTP et proxy, qui tentent apparemment de lire le corps de la réponse vide, mais la spécification lit :
- Un message de réponse qui « NE DOIT PAS » inclure un corps de message (par exemple le 1xx, 204, et 304 réponses et toute réponse à une requête HEAD) est toujours terminé par le premier vide ligne après que les champs d'en-tête, quels que soient les champs en-tête d'entité présent dans le message.
Pour moi, « quels que soient les champs en-tête d'entité » implique que les clients devraient tolérer cet état de choses. Erlang HTTP bibliothèque a choisi cette interprétation. Cependant, lighthttpd et IBM a choisi l'interprétation contraire -. que le serveur ne doit pas inclure ces en-têtes pour les réponses qui sont interdites d'avoir des corps
Donc, si l'application Web supprimer les en-têtes de la réponse, ou si l'infrastructure réseau et les clients tolérer ces en-têtes sur 204 Pas de contenu, 304 Non modifié, etc.?
La solution
Selon le RFC7230 (voir http://tools.ietf.org /html/rfc7230#section-3.3.1 ) à la fin de la page 29 il est écrit:
Un serveur NE DOIT PAS envoyer un champ d'en-tête Transfer-Encoding dans tous les réponse avec un code d'état de 1xx (d 'information) ou 204 (n Contenu).
Par conséquent, l'application Web ne doit pas envoyer les en-têtes de la réponse.
Autres conseils
Je ne peux pas vous dire ce qui est correct, car je ne connais pas le protocole HTTP dans ce détail.
Cependant, vous devez vous demander:
- Puis-je changer ma demande de supprimer ces en-têtes?
- ou puis-je changer les consommateurs de ma demande d'ignorer ces en-têtes?
A mon avis, l'application ne doit pas envoyer les en-têtes dans ce cas.