J'ai du mal à trouver une spécification précise de cela dans la norme. J'ai un client HTTP qui n'inclut pas d'en- Content-Length: 0
tête lorsque je fais une demande PUT où je ne spécifie pas de corps, et un serveur qui est confus par de telles demandes, et je me demande quel programme je dois blâmer.
92
Réponses:
Les requêtes HTTP ont un corps si elles ont un en-tête Content-Length ou Transfer-Encoding ( RFC 2616 4.3 ). Si la requête n'a ni l'un ni l'autre, elle n'a pas de corps et votre serveur doit la traiter comme telle.
Cela dit, il est inhabituel qu'une requête PUT n'ait pas de corps, et donc si je concevais un client qui voulait vraiment envoyer un corps vide, je passerais Content-Length: 0. En effet, en fonction de la lecture du POST et les définitions de la méthode PUT ( RFC 2616 9.5, 9.6 ), on pourrait soutenir que le corps est implicitement requis - mais une manière raisonnable de ne gérer aucun corps serait de supposer un corps de longueur nulle.
la source
PUT
requête est essentiellement destinée à créer ou mettre à jour un fichier sur le serveur. Et il n'y a rien d' illégitime dans le fait qu'un fichier soit vide, n'est-ce pas?disable
etenable
sont des verbes. Je préférerais probablement utiliserPATCH
sur le/users/{id}
point final dans ce cas.Ne pas répondre à la question, mais affirmer comment jaxrs me permet d'utiliser fréquemment des PUT sans corps:
Exemple de mise sans corps: donnez à l'utilisateur une autorisation supplémentaire.
PUT / admin / users / {username} / permission / {permission}
la source
Un corps n'est pas requis par la norme IETF, bien que la longueur du contenu soit égale à 0 s'il n'y a pas de corps. Utilisez la méthode qui convient à ce que vous faites. Si vous deviez le mettre dans le code, étant donné
et une variable distante appelée
r
.Un message équivaut à
Un put équivaut à
et un get équivaut à
la source
int f(int* resource, int body);
et puis POST invoqueraitf(&r, x);
- ce qui peut faire ou ne pas faire àr
tout ce que le serveur juge approprié. Mais il peut aussi renvoyer des trucs, alors ... peut-être plusy = f(&r, x);
.Qu'est-ce que PUT (au sens du verbe) sur le serveur s'il n'y a pas de contenu? La spécification fait référence au contenu comme "l'entité incluse", mais une demande sans contenu n'aurait aucune entité incluse, et donc rien à mettre sur le serveur.
À moins, bien sûr, que vous ne vouliez rien METTRE sur le serveur, auquel cas vous voudriez probablement un DELETE à la place.
la source
Content-Length: 0
ou{ }
en JSON en tant que corps?Le champ de longueur du contenu est requis conformément à la section suivante de la norme HTTP / 1.1 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.13
la source