Chaque requête HTTP utilise une méthode pour décrire son objectif essentiel. Chaque méthode a des utilisations spécifiques pour des tâches allant de la récupération d’une page web à la suppression d’une ressource. GET et POST sont les deux méthodes les plus connues, mais il en existe sept autres.


Découvrez ce concept et l’utilité de chacune des neuf méthodes HTTP possibles.


Qu’est-ce qu’une méthode HTTP ?

Chaque requête HTTP que vous faites comprend une action et une cible pour cette action, un peu comme un verbe et un nom qui agit en tant qu’objet.

L’URL identifie une ressource unique, qui constitue la cible de la requête. Le verbe, c’est-à-dire l’action à effectuer sur cette URL, est représenté par une méthode.

La première ligne d’une requête HTTP fournit les informations les plus importantes, notamment la version HTTP, l’URL de la ressource et la méthode de requête :

 GET /software/htp/cics/index.html HTTP/1.1

Quelles sont les 9 méthodes HTTP ?

Les quatre premières méthodes sont des équivalents des quatre actions du modèle CRUD : Créer, Lire, Mettre à jour et Supprimer. Les méthodes HTTP correspondantes sont POST, GET, PUTet DELETE.

GET

La requête par défaut la plus courante que vous envoyez lorsque vous naviguez sur le web et que vous cliquez sur des liens ou que vous demandez des données par l’intermédiaire d’une API. Le serveur doit renvoyer la ressource dans son corps de réponse.

POST

Utilisez POST pour créer de nouvelles ressources, en particulier lorsque ces ressources ont un parent identifiable. Par exemple, si vous avez une ressource /clients, vous devez créer un nouveau client en envoyant les données nécessaires à /clients.

PUT

Mettre à jour ou remplacer une ressource existante. Cette méthode est similaire à POST, mais le client est responsable du choix d’un identifiant unique pour la ressource. Pour créer une ressource à l’aide de PUT, l’URL de la ressource doit inclure un identifiant, par exemple, /clients/007.

DELETE

Cette méthode permet de supprimer la ressource spécifiée dans l’URL. Comme pour toutes les méthodes HTTP, la prise en charge dépend du serveur. Il peut laisser n’importe qui supprimer une ressource, bien que cela soit manifestement risqué. Un serveur qui prend en charge la méthode DELETE exige généralement une authentification et une autorisation.

Deux autres méthodes offrent de légères variations par rapport à ce qui précède : PATCH et TÊTE. Vous pouvez les trouver utiles lors de l’utilisation de certaines API ou si vous construisez les vôtres.

PATCH

La méthode PATCH met à jour une ressource existante, avec seulement des données partielles. En d’autres termes, il n’est pas nécessaire de fournir la représentation complète de la nouvelle ressource, mais seulement les champs à mettre à jour.

Une requête HEAD est utilisée lorsque vous souhaitez obtenir des informations sur une ressource, mais pas sur la ressource elle-même. La réponse ne comprendra pas de corps, mais un ensemble d’en-têtes HTTP utiles. Vous pouvez connaître la taille totale d’un fichier avant de le télécharger, grâce à l’en-tête de réponse Content-Length.

Les méthodes restantes –OPTIONS, CONNECTERet TRACE-sont plus obscures. Elles traitent des métadonnées, de la mise en réseau et du dépannage. Vous pouvez les trouver utiles dans certains types de programmation, mais vous ne les utiliserez probablement pas tous les jours.

OPTIONS

Un serveur doit répondre à cette méthode en indiquant les méthodes HTTP que la ressource prend en charge. Cela peut être utile pour la découverte.

CONNECTER

Certains types de logiciels de mise en réseau peuvent utiliser cette méthode pour établir un tunnel entre deux ordinateurs. Cette méthode est souvent utilisée pour initier une connexion HTTPS via un proxy.

TRACE

Cette méthode est utile pour le dépannage. Lorsqu’il la reçoit, le serveur doit renvoyer la requête qu’il a reçue dans le corps de la réponse. La méthode fournit un mécanisme permettant de vérifier si des machines intermédiaires ont modifié des détails de la demande.

GET et HEAD sont les deux seules méthodes que tout serveur web général prend en charge. Un serveur particulier peut ou non prendre en charge d’autres méthodes, c’est pourquoi vous devez d’abord vérifier.

Quand pouvez-vous utiliser ces méthodes ?

La plupart du temps, les méthodes HTTP sont transparentes pour vous. Cependant, vous devrez les prendre en compte si vous ajoutez un formulaire à une page web ou si vous utilisez une API.

Méthodes HTTP en HTML

Les formulaire de l’élément méthode permet de définir la méthode HTTP à utiliser lorsque le formulaire est soumis. HTML ne prend en charge que la méthode post et obtenir pour cet attribut, ainsi qu’une obscure alternative de dialogue.

 <form method="post">
  ...
</form>

Vous pouvez utiliser des fonctionnalités telles que les outils de développement de Chrome pour afficher les éléments suivants Réseau Le trafic de données et la confirmation de la méthode que votre navigateur envoie pour une requête particulière. Notez que la plupart des formulaires web envoient un POST car ils mettent généralement à jour des données sur le serveur. En revanche, de nombreux formulaires de recherche utilisent la méthode GET, car ils se contentent de récupérer des données sans les modifier.

Le panneau des outils de développement de Chrome affiche 3 requêtes avec des méthodes différentes : POST, GET et PATCH

Les données POST ne faisant pas partie de l’URL, elles sont plus confidentielles que si vous les envoyez via GET. Les données existent toujours dans le corps de la requête où, en théorie, un attaquant peut les intercepter. Mais l’envoi de données via HTTPS devrait atténuer ce problème.

Vous ne devriez jamais mettre en œuvre une connexion d’utilisateur avec des requêtes GET. Même si la connexion ressemble plus à une opération de lecture qu’à une opération de création ou de mise à jour, vous devez toujours utiliser POST pour sécuriser les données.

Les formulaires HTML ne prenant en charge que les requêtes GET et POST, il n’est pas possible de créer directement un formulaire qui, par exemple, supprime une ressource sur le serveur. Une solution de contournement courante, qui respecte les principes REST sur le serveur, consiste à utiliser une variable de remplacement et à faire comme s’il s’agissait de la méthode HTTP d’origine. Par exemple, il est possible de créer un formulaire qui supprime une ressource sur le serveur :

 <form method="post">
  <input type="hidden" name="_method" value="DELETE" />
  ...
</form>

Votre code côté serveur peut vérifier la présence de cette variable « méthode proxy » et la traiter comme s’il s’agissait de la véritable méthode utilisée. Par exemple, en PHP :

 $method = $_SERVER["REQUEST_METHOD"];

if (array_key_exists("_method", $_REQUEST)) {
  $method = $_REQUEST["_method"];
}

Envoi de requêtes HTTP par programme

L’API Web Fetch fournit une fonction JavaScript fetch() que vous pouvez utiliser pour envoyer une requête HTTP. Elle prend en charge l’ensemble des méthodes, et pas seulement les méthodes GET et POST prises en charge par HTML.

La fonction fetch envoie une requête GET par défaut. Pour utiliser une méthode différente, spécifiez son nom comme valeur de l’attribut méthode dans un objet que vous envoyez en tant que deuxième argument.

 fetch('https://example.com/', { method: "HEAD" });

Vous pouvez également envoyer des requêtes HTTP à partir de nombreux langages côté serveur, y compris PHP. Dans ce langage, la bibliothèque curl est un moyen courant d’envoyer de telles requêtes.

La bibliothèque curl dispose d’une option CURLOPT_CUSTOMREQUEST que vous pouvez définir pour spécifier une méthode

 if ($ch = curl_init($url)) {
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_exec($ch);
    // ...
}

Via la ligne de commande

L’outil de ligne de commande curl vous permet de transférer des données vers ou depuis un serveur, via l’un de plusieurs protocoles. HTTP (et HTTPS) sont deux cas d’utilisation très courants.

Par défaut, curl envoie une requête GET, comme vous pouvez le confirmer avec la commande suivante :

 curl -v -s -o /dev/null example.com/get-test

Vous pouvez voir la méthode de requête sur la cinquième ligne de la sortie :

Un exemple de requête GET utilisant curl.

Vous pouvez modifier la méthode de requête envoyée par curl en utilisant l’option -X :

 curl -v -s -o /dev/null example.com/get-test -X POST

Maintenant, curl envoie une requête en utilisant la méthode POST :

Un exemple de requête POST utilisant curl.

HTTP a de nombreuses utilisations

La plupart de vos activités sur le web impliquent des requêtes GET standard, avec de temps en temps des requêtes POST pour l’envoi de formulaires. Mais HTTP est un protocole beaucoup plus expressif que cela ne le laisse supposer.

Certaines des méthodes les plus courantes reflètent le modèle CRUD, ce qui fait de HTTP une excellente base pour construire une API axée sur les ressources.