POST
La méthode HTTP POST
envoie des données au serveur. Le type du corps de la requête est indiqué par l'en-tête Content-Type
.
La différence entre PUT
et POST
tient au fait que PUT
est une méthode idempotente. Une requête PUT
, envoyée une ou plusieurs fois avec succès, aura toujours le même effet (il n'y a pas d'effet de bord). À l'inverse, des requêtes POST
successives et identiques peuvent avoir des effets additionnels, ce qui peut revenir par exemple à passer plusieurs fois une commande.
Une requête POST
est habituellement envoyée via un formulaire HTML et a pour résultat un changement sur le serveur. Dans ce cas, le type du contenu est sélectionné en mettant la chaîne de caractères adéquate dans l'attribut enctype
de l'élément <form>
ou dans l'attribut formenctype
de l'élément <input>
, voir celui des éléments <button>
:
application/
x-www-form-urlencoded
: les valeurs sont encodées sous forme de couples clé-valeur séparés par'&'
, avec un'='
entre la clé et la valeur. Les caractères non alphanumériques sont percent encoded : c'est la raison pour laquelle ce type de format n'est pas adapté à une utilisation avec des données binaires (utilisezmultipart/form-data
à la place)multipart/form-data
text/plain
Lorsque la requête POST
est envoyée par un autre moyen qu'un formulaire HTML, par exemple via XMLHttpRequest
, le corps peut être de n'importe quel type. Comme décrit dans la spécification HTTP 1.1, la méthode POST
est conçue pour permettre une méthode uniforme couvrant les fonctions suivantes :
- Annotation de ressources existantes
- Publication d'un message sur un tableau d'affichage, un groupe de discussion, une liste de diffusion, ou un groupe similaire d'articles;
- Apport d'un bloc de données, tel que le résultat produit par la soumission d'un formulaire, à un processus de traitement de données;
- Extension d'une base de données au travers d'une opération d'ajout.
La requête a un corps | Oui |
---|---|
Une réponse inclut un corps | Oui |
Sûre | Non |
Idempotente | Non |
Peut être mise en cache | Seulement si une information de péremption est incluse |
Autorisée dans les formulaires HTML | Oui |
Syntaxe
POST /index.html
Exemple
Un formulaire simple utilisant le type de contenu par défaut application/x-www-form-urlencoded
:
POST / HTTP/1.1 Host: foo.com Content-Type: application/x-www-form-urlencoded Content-Length: 13 say=Hi&to=Mom
Un formulaire utilisant le type de contenu multipart/form-data
:
POST /test.html HTTP/1.1 Host: example.org Content-Type: multipart/form-data;boundary="boundary" --boundary Content-Disposition: form-data; name="field1" value1 --boundary Content-Disposition: form-data; name="field2"; filename="example.txt" value2