Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

Méthode de requête POST

Baseline Widely available

Cette fonctionnalité est bien établie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis ⁨juillet 2015⁩.

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 est que PUT est idempotente : l'appeler une fois ou plusieurs fois successivement ne change rien (il n'y a pas d'effets secondaires). Des requêtes POST identiques successives peuvent avoir des effets supplémentaires, comme créer la même commande plusieurs fois.

Les formulaires HTML envoient généralement des données en utilisant POST, ce qui entraîne habituellement une modification côté serveur. Pour les formulaires HTML, le format/l'encodage du contenu du corps est déterminé par l'attribut enctype de l'élément <form> ou l'attribut formenctype des éléments <input> ou <button>. L'encodage peut être l'un des suivants :

  • application/x-www-form-urlencoded : les clés et valeurs sont encodées sous forme de couples clé-valeur séparés par un esperluette (&), avec un signe égal (=) entre la clé et la valeur (par exemple, first-name=Frida&last-name=Kahlo). Les caractères non alphanumériques dans les clés et valeurs sont encodés en pourcentage : c'est pourquoi ce type n'est pas adapté aux données binaires, il faut utiliser multipart/form-data pour cela.
  • multipart/form-data : chaque valeur est envoyée comme un bloc de données (« partie du corps »), avec un séparateur défini par l'agent utilisateur (par exemple, boundary="delimiter12345") entre chaque partie. Les clés sont décrites dans l'en-tête Content-Disposition de chaque partie ou bloc de données.
  • text/plain

Quand la requête POST est envoyée suite à un appel à fetch(), ou pour toute autre raison qu'un formulaire HTML, le corps peut être de n'importe quel type. Comme décrit dans la spécification HTTP 1.1, POST est conçu pour permettre une méthode uniforme couvrant les fonctions suivantes :

  • Annotation de ressources existantes
  • Publication d'un message sur un forum, un groupe de discussion, une liste de diffusion ou un groupe d'articles similaire
  • Ajout d'un·e nouvel·le utilisateur·ice via un formulaire d'inscription
  • Fourniture d'un bloc de données, comme le résultat de la soumission d'un formulaire, à un processus de traitement de données
  • Extension d'une base de données par une opération d'ajout
La requête a un corps Oui
La réponse de succès a un corps Oui
Sûre Non
Idempotente Non
Mis en cache Seulement si une information de péremption est incluse
Autorisée dans les formulaires HTML Oui

Syntaxe

http
POST <request-target>["?"<query>] HTTP/1.1
<request-target>

Identifie la ressource cible de la requête lorsqu'elle est combinée avec l'information fournie dans l'en-tête Host. Il s'agit d'un chemin absolu (par exemple /chemin/vers/fichier.html) dans les requêtes vers un serveur d'origine, et d'une URL absolue dans les requêtes vers les serveurs mandataires (proxies) (par exemple http://www.exemple.fr/chemin/vers/fichier.html).

<query> Facultatif

Un fragment de requête optionnel précédé d'un point d'interrogation ?. Souvent utilisé pour transmettre des informations sous la forme de paires clé=valeur.

Exemple

Soumission de formulaire encodé en URL

Un formulaire utilisant l'encodage de contenu application/x-www-form-urlencoded (par défaut) envoie une requête dont le corps contient les données du formulaire sous forme de paires clé=valeur, chaque paire étant séparée par un symbole &, comme ci-dessous :

http
POST /test HTTP/1.1
Host: exemple.fr
Content-Type: application/x-www-form-urlencoded
Content-Length: 27

field1=value1&field2=value2

Soumission de formulaire multipart

L'encodage multipart/form-data est utilisé lorsqu'un formulaire inclut des fichiers ou beaucoup de données. Le corps de la requête sépare chaque partie du formulaire à l'aide d'une chaîne de séparation (boundary en anglais). Exemple de requête dans ce format :

http
POST /test HTTP/1.1
Host: exemple.fr
Content-Type: multipart/form-data;boundary="delimiter12345"

--delimiter12345
Content-Disposition: form-data; name="field1"

value1
--delimiter12345
Content-Disposition: form-data; name="field2"; filename="exemple.txt"

value2
--delimiter12345--

L'en-tête Content-Disposition indique comment les données du formulaire doivent être traitées, en précisant le champ name et éventuellement filename.

Spécifications

Specification
HTTP Semantics
# POST

Compatibilité des navigateurs

Voir aussi