Apprendre PHP & MySQL : Méthodes HTTP : GET & POST
Le protocole HTTP permet la communication entre un client et un serveur. Découvrons les méthodes GET et POST.
Sur le web, les clients (navigateurs), communiquent avec les serveurs en utilisant le protocole HTTP (HyperText Transfer Protocol). Ce protocole contrôle la façon dont le client formule ses demandes et la façon dont le serveur y répond. Ils permettent de spécifier la demande du client.
Le protocole HTTP connaît différentes méthodes de requête qui transitent du client vers le serveur. Ces méthodes indiquent le type d’action que l’on souhaite réaliser sur la ressource indiquée. Il est important de connaître les 2 plus courantes d’entre elles, à savoir GET
et POST
.
Méthode GET
Rôle et anatomie
Le rôle de la méthode GET
est de demander une ressource au serveur. Cette ressource peut être de divers types : page HTML, fichier JSON, image, etc. C’est le type de requête par défaut qui s’exécute lorsqu’on accède à une page web via un lien.
Si vous accédez à une page web normalement via un lien, le navigateur se connecte au serveur et lui envoie une requête GET
.
GET /mapage.php
Il est également possible de transmettre au serveur des informations via des paramètres de requête. Concrètement, ces paramètres transitent de manière visible dans l’URL.
La syntaxe est la suivante : https://monsite.com/ma-page.php?param1=valeur¶m2=valeur
- La chaîne de paramètres de requête est introduite par un
?
. - Chaque paramètre est nommé, il se compose donc d’un nom et d’une valeur :
param=valeur
. - Si plusieurs paramètres doivent être inclus dans l’URL, ils sont séparés par un
&
.
Si les requêtes GET
sans paramètres sont principalement utilisées pour retourner des pages web classiques, les requêtes avec paramètres sont quant à elles très utilisées lorsqu’il s’agit de demander un traitement « sur mesure » au serveur.
Prenons l’exemple d’une requête d’un moteur de recherche qui va toujours demander au serveur de retourner le template search.php
, mais en lui spécifiant des informations variables (selon les critères de recherche saisis par l’utilisateur).
GET /search.php?category=dev&sort=likes_desc&keyword=php
Ici, le serveur va pouvoir récupérer les paramètres d’URL suivants :
- keyword =
php
- category =
dev
- sort =
likes_desc
On pourrait donc imaginer ensuite créer un script qui va récupérer en base de données les articles de la catégorie « développement » qui contiennent le mot « php », triés par nombre de likes décroissant.
Envoi de paramètres
Les paramètres GET
peuvent être envoyés via une requête HTTP de 2 manières : directement dans l’URL ou via un formulaire.
Via l’URL
Il suffit de spécifier les paramètres en question dans l’URL, généralement via l’attribut href
.
<a href="search.php?category=dev">Articles de dev</a>
Via un formulaire
Les formulaires HTML jouent le rôle d’IHM (Interface Homme-Machine). Ils permettent aux utilisateurs de renseigner des valeurs pour les paramètres GET
de manière interactive.
Pour cela, on utilise :
- Un attribut HTML
method
qui permet de spécifier avec quelle méthode HTTP sera interrogé le serveur à la soumission du formulaire. - Un attribut HTML
action
qui permet de spécifier le chemin relatif ou absolu vers le fichier qui va recevoir les données.
<form action="search.php" method="GET">
<div class="form-item">
<label for="keyword">Recherche :</label>
<input type="search" id="keyword" name="keyword">
</div>
<div class="form-item">
<p>Catégorie :</p>
<input type="radio" name="category" id="dev" value="dev">
<label for="dev">Développement</label>
<input type="radio" name="category" id="hardware" value="hardware">
<label for="hardware">Hardware</label>
</div>
<div class="form-item">
<label for="sort">Trier par :</label>
<select name="sort" id="sort">
<option value="title_asc">Titre (A-Z)</option>
<option value="title_desc">Titre (Z-A)</option>
<option value="likes_asc">Nombre de likes (croissant)</option>
<option value="likes_desc">Nombre de likes (décroissant)</option>
</select>
</div>
<div class="form-item">
<input type="submit" value="ok">
</div>
</form>
Autres technologies
Il est également possible d’envoyer ces paramètres GET
au serveur autrement comme par exemple via :
Récupération de paramètres
Il va bien entendu être possible de récupérer en PHP les paramètres GET
envoyés via l’URL ou un formulaire, afin de les exploiter.
Pour cela, on fait appel à la variable superglobale $_GET['param']
. param
correspondant à l’attribut HTML name
du champ pour lequel on souhaite récupérer la saisie de l’utilisateur.
// Récupération des paramètres GET dans une variable afin d'en alléger la syntaxe pour une réutilisation ultérieure
$keyword = $_GET['keyword'];
$category = $_GET['category'];
$sort = $_GET['sort'];
// Exécution de la requête de récupération des articles de la catégorie « développement » qui contiennent le mot « php », triés par nombre de likes décroissant
Méthode POST
Rôle et anatomie
Contrairement à GET
, le rôle de la méthode POST
est d’envoyer des données au serveur. Ces données proviennent généralement de formulaires utilisateur.
Si vous soumettez un formulaire, le navigateur se connecte au serveur et lui envoie une requête POST
.
POST /mapage.php
Cette méthode permet bien évidemment aussi de transmettre des paramètres, mais les ajoute cette fois-ci non pas dans l’URL, mais à l’intérieur de l’en-tête HTTP. Ils sont masqués de l’utilisateur.
Envoi de paramètres
Via un formulaire
Les formulaires qui envoient des informations au serveur n’ayant pas vocation à retourner de résultats, mais bien d’y écrire des choses, reposent sur la méthode HTTP POST
.
Prenons l’exemple d’une requête de formulaire de login, qui, une fois soumis, va demander au serveur de réaliser les vérifications d’authentification.
<form action="login.php" method="POST">
<label for="login">Adresse email :</label>
<input type="email" name="login" id="login">
<label for="pwd">Mot de passe :</label>
<input type="password" name="pwd" id="pwd">
<input type="submit" value="connexion">
</form>
Autres technologies
Il est également possible d’envoyer ces paramètres GET
au serveur autrement comme par exemple via :
Récupération de paramètres
Pour récupérer les paramètres POST
en provenance du formulaire, on fait appel à $_POST['param']
. param
correspondant à l’attribut HTML name
du champ pour lequel on souhaite récupérer la saisie de l’utilisateur.
// Récupération des paramètres POST dans une variable afin d'en alléger la syntaxe pour une réutilisation ultérieure
$login = $_POST['login'];
$pwd = $_POST['pwd'];
// Exécution du script qui gère l'authentification de l'utilisateur...
Autres méthodes HTTP
GET
et POST
ne sont pas les seules méthodes HTTP.
Il existe aussi PUT
et PATCH
qui permettent de modifier des ressources sur le serveur, ou encore DELETE
qui permet d’en supprimer.