Quand utiliser GET et quand utiliser POST avec XMLHttpRequest?

Question

Quand faut-il utiliser la commande GET ou POST dans une requête Ajax? Quelle est la relation avec les méthodes GET et POST pour les formulaires en HTML?

Réponse courte

La commande POST, contrairement à la commande GET, s'accompagne de l'envoi de données au serveur, donc à un script qui les reçoit en paramètres. En outre POST n'est pas mis en cache.
On utilise en conséquence GET pour charger des documents qui ne changent pas ou exécuter des scripts qui ne reçoivent pas de paramètre, et POST dans les autres cas.
Le rôle précis de ces commandes dans chaque contexte est donné dans les spécifications du W3C.

Réponse longue

GET et POST pour les formulaires

Le choix est résumé dans une phrase du document du W3C lié en annexe:

HTTP GET is designed so that all information necessary for the interaction is part of the URI, thus promoting URI addressability. With HTTP POST, some information intended to affect change to the resource state may be part of the protocol headers, not in the URI.

GET de HTTP est défini de sorte que toute l'information transmise au serveur fasse partie de l'URL (donc l'adresse avec une liste de paramètre qui en sont séparés par un point d'interrogation). Avec POST, une information supplémentaire est transmise au serveur dans le corps de la requête.

Quand on envoie les données d'un formulaire n'a pas à ce soucier des paramètres, les variables et leurs valeurs sont transmises automatiquement empaquetées dans une chaîne de paramètres.

Et dans la spécification XMLHttpRequest

La spécification XHR, dont la traduction officielle est hébergée sur ce site, précise que l'on utilise GET sans envoyer de données aux serveur par la méthode send et que l'on utilise POST dans le cas contraire:

Si la méthode enregistrée est GET agir comme si l'agument données était null.

Donc pratiquement on utilise GET pour charger un document, au lancer un script et POST pour passer des paramètres à un script sur le serveur.
Le document chargé par GET est mis en cache et ne sera pas rechargé lors des requêtes ultérieures, même s'il a changé. On peut surmonter cet inconvénient en ajoutant un paramètre directement dans l'URL avec une valeur aléatoire, ce qui force le rechargement du fichier.

Plus d'informations
© 2009-2012 Xul.fr