Qui HTTP méthodes nécessitent un corps?

Une des méthodes HTTP, tels que POST, besoin d'un corps pour être envoyé après les en-têtes et le double CRLF.

D'autres, comme GET, n'ont pas de corps, et pour eux, le double CRLF marque la fin de la demande.

Mais quid des autres: PUT, DELETE, ... comment savoir à qui on demande d'un corps?

Comment faut-il une générique de client HTTP réagir à un inconnu méthode HTTP? De le rejeter? Besoin d'un corps par défaut, ou non besoin d'un corps par défaut?

Un pointeur à la spec serait appréciée.


Modifier : je vais détailler un peu plus ma question, comme l'a demandé dans les commentaires.

Je suis de la conception d'un générique HTTP client qu'un programmeur peut utiliser pour envoyer arbitraire requêtes HTTP vers un serveur.

Le client pourrait être utilisée comme ceci (pseudo-code):

HttpClient.request(method, url [, data]);

Les données sont facultatives et peuvent être des données brutes (string), ou un tableau associatif de paires clé/valeur.

La bibliothèque de l'encoder des données si c'est un array, puis ajouter les données à l'URL d'un GET demande, ou l'envoyer dans le corps du message pour un POST demande.

Je suis donc d'essayer de déterminer si cette HttpClient doit/doit/ne doit pas/ne devrait pas inclure un message du corps dans la demande, compte tenu de la méthode HTTP choisi par le développeur.

  • générique http client -> generic serveur http.
  • ?
  • Veuillez expliquer ce que vous essayez de faire. Pourquoi voulez-vous savoir quelles méthodes nécessitent un corps? Voulez-vous écrire un serveur HTTP? Avez-vous fait toute recherche? Aussi le client effectue une requête et détermine ainsi la méthode à utiliser; ainsi, un client ne peut émettre une méthode qu'il ne sait pas. Entendez-vous le serveur? Aussi je ne comprends pas pourquoi vous êtes curieux de savoir quand envoyer un corps. Vous envoyez un corps quand vous savez que vous voulez, donc si vous ne savez pas si vous voulez, vous ne devriez probablement pas.
  • Un corps est autorisé pour GET juste que cela ne doit pas changer le comportement de la GET demande (donc, des points de bonus si vous pouvez penser à une réelle utilisation valide pour cet)
  • Je ne sais pas ce que la méthode est, c'est un client générique je suis de la conception. Veuillez voir ma mise à jour de question.
  • Comment le serveur peut-il savoir où la demande se termine alors? J'ai pensé qu'il savait de la méthode, s'il y avait un corps ou pas?
  • Voir (en cours) point 2 de @Jordan réponse: "la présence d'un corps est signalé par l'inclusion d'un Contenu ou de Longueur d'Encodage de Transfert de l'en-tête"
  • Il est bon de réaliser qu'il ya beaucoup de méthodes HTTP. Beaucoup d'entre eux viennent de WEBDAV. annevankesteren.nl/2007/10/http-methods - et c'est de 2007, donc il existe peut-être encore plus maintenant. Je serais personnellement mis mon accent d'abord sur l'obtention de HTTTP 1.1 RFC droit, et être libéral dans les autres cas.
  • Vous pourriez décider d'être plus stricte que la spécification HTTP lui-même. Appliquer le bon sens. Vous obtiendrez des plaintes assez vite si elle s'avère être un problème pour personne. Et avant cela, vous pouvez peut-être faire quelque chose de bon en empêchant certains involontaires ou des requêtes inutiles en cours d'envoi.
  • c'est exactement cela! Bonne nouvelle, il y a une stricte règle pour la détermination de cette. Mon erreur a été de supposer qu'il s'agit de la méthode qui a été responsable de la détermination, et non pas ces en-têtes comme nous le savons maintenant.
  • Merci pour vos commentaires. Je vais être en mesure d'appliquer le bon sens maintenant que je obtenir une image plus large!
  • Oui, la bonne stratégie. Le sens commun n'est pas si courant après tout, dans ce contexte. Je n'aurais pas deviné avant de Googler qu'il y a tellement de méthodes HTTP!
  • Ne vous n'avez pas de cas d'utilisation où les navigateurs (le client) peuvent aussi en faire la demande? ou serait-il juste de votre mise en œuvre de client générique? Je ne pense pas que tous webDAV méthodes sont pris en charge par les navigateurs.
  • Non, je ne sais pas (encore), mais il semble que la plupart des navigateurs déjà l'appui de la demande de méthodes au-delà de GET/POST via XMLHttpRequest. En outre, un développeur peut très bien concevoir un service HTTP pour un autre client que d'un navigateur web, et dans ce cas il aurait besoin d'un très générique de mise en œuvre pour s'y connecter!
  • J'ai eu exactement ce question/problème et a réalisé que les paramètres URI (?query=quoi que ce soit) doit pas être confondue avec le corps du message dans votre client HTTP de l'interface. Ils devraient être traités séparément.

InformationsquelleAutor Benjamin | 2013-05-02