15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer
31.10.2024

Comprendre les requêtes HTTP sous Linux : Structure, méthodes et exemples pratiques

HTTP (Hypertext Transfer Protocol) est la couche de communication fondamentale du web moderne. Chaque fois qu’un navigateur charge une page, qu’un appel API est effectué ou qu’un serveur récupère une ressource distante, une requête HTTP est au cœur de cette interaction. Pour les administrateurs système Linux, les développeurs et les ingénieurs DevOps, comprendre en profondeur comment les requêtes HTTP sont structurées, quelles méthodes utiliser et comment les créer ou les analyser à partir de la ligne de commande n’est pas seulement utile — c’est essentiel.

Ce guide complet décompose l’anatomie d’une requête HTTP, explique chaque méthode HTTP majeure avec des exemples concrets, et vous guide à travers les outils Linux les plus puissants disponibles pour envoyer, déboguer et analyser le trafic HTTP. Que vous gériez un environnement VPS Hosting, exécutiez des applications web sur un serveur dédié ou appreniez simplement les bases de la communication web, cet article affûtera votre fondation technique.

Qu’est-ce qu’une requête HTTP ?

Une requête HTTP est un message envoyé par un client (tel qu’un navigateur web, une application mobile ou un outil en ligne de commande) à un serveur, lui demandant d’effectuer une action spécifique sur une ressource. Le serveur traite ensuite la requête et retourne une réponse HTTP.

Cet échange client-serveur est régi par la spécification HTTP, actuellement déployée le plus largement en tant que HTTP/1.1 et HTTP/2, avec HTTP/3 (basé sur QUIC) gagnant rapidement en adoption.

Anatomie d’une requête HTTP

Chaque requête HTTP est composée de trois parties principales : la ligne de requête, les en-têtes et un corps de message optionnel. Comprendre chaque composant est essentiel pour déboguer les problèmes, construire des API et configurer correctement les serveurs web.

1. La ligne de requête

La ligne de requête est toujours la première ligne d’une requête HTTP. Elle contient trois éléments séparés par des espaces :

  • Méthode HTTP — l’action à effectuer (par exemple, GET, POST, DELETE)
  • Request-URI — le chemin vers la ressource cible (par exemple, /index.html ou /api/users)
  • Version HTTP — la version du protocole utilisée (par exemple, HTTP/1.1)

Exemple :

GET /index.html HTTP/1.1

2. En-têtes de requête

Les en-têtes contiennent des métadonnées sur la requête. Ils indiquent au serveur les capacités du client, le format des données envoyées, les identifiants d’authentification, les préférences de mise en cache, et bien plus encore. Chaque en-tête est une paire clé-valeur séparée par deux points.

En-têtes courants et leurs objectifs :

En-têteObjectif
HostSpécifie le nom de domaine du serveur
User-AgentIdentifie le logiciel client effectuant la requête
AcceptIndique au serveur quels types de contenu le client peut traiter
Content-TypeDécrit le format du corps de la requête
Content-LengthIndique la taille du corps de la requête en octets
AuthorizationTransporte les identifiants d’authentification
Accept-EncodingListe les algorithmes de compression que le client supporte
ConnectionContrôle si la connexion reste ouverte après la requête

Exemple d’en-têtes :

Host: www.example.com
User-Agent: Mozilla/5.0 (Linux; Android 10; Pixel 3 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Mobile Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Connection: keep-alive

3. Le corps de la requête

Toutes les requêtes HTTP n’incluent pas un corps. Les méthodes comme GET et DELETE ne transportent généralement pas de corps. Les méthodes comme POST, PUT et PATCH utilisent le corps pour transmettre des données au serveur — par exemple, des soumissions de formulaires, des charges utiles JSON ou des téléchargements de fichiers.

Exemple complet de requête HTTP

Voici une requête HTTP complète et réaliste pour un point de terminaison de connexion qui accepte des identifiants JSON :

POST /login HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Linux; Android 10; Pixel 3 XL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Mobile Safari/537.36
Content-Type: application/json
Content-Length: 57
Accept: application/json
Connection: keep-alive

{
  "username": "exampleUser",
  "password": "examplePassword"
}

En décomposant cela :

  • POST /login HTTP/1.1 — la ligne de requête
  • Le bloc de paires clé-valeur — les en-têtes de requête
  • L’objet JSON en bas — le corps de la requête

Méthodes HTTP expliquées

HTTP définit un ensemble de méthodes de requête (également appelées verbes HTTP) qui indiquent l’action souhaitée à effectuer sur la ressource identifiée. Chaque méthode a des sémantiques spécifiques, des garanties de sécurité et des caractéristiques d’idempotence que vous devez comprendre lors de la conception ou de la consommation d’API.

GET — Récupérer une ressource

Objectif : Récupérer des données du serveur sans les modifier.

Caractéristiques :

  • Sûre — ne modifie pas l’état du serveur
  • Idempotente — l’appeler plusieurs fois produit le même résultat
  • Les paramètres sont passés via la chaîne de requête URL
  • Ne doit jamais être utilisée pour envoyer des données sensibles

Exemple :

GET /api/users?id=123 HTTP/1.1
Host: api.example.com
Accept: application/json

Cas d’usage : Chargement de pages web, récupération de données API, récupération de fichiers.

POST — Soumettre des données au serveur

Objectif : Envoyer des données au serveur pour créer une nouvelle ressource ou déclencher un processus.

Caractéristiques :

  • Non idempotente — soumettre la même requête deux fois peut créer des enregistrements en double
  • Les données sont envoyées dans le corps de la requête
  • Couramment utilisée pour les soumissions de formulaires et la création de ressources API

Exemple :

POST /api/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 51

{
  "name": "John Doe",
  "email": "john@example.com"
}

Cas d’usage : Inscription d’utilisateur, formulaires de connexion, création d’enregistrements, téléchargements de fichiers.

PUT — Remplacer ou créer une ressource

Objectif : Remplacer complètement une ressource existante, ou la créer si elle n’existe pas encore, à l’URI spécifié.

Caractéristiques :

  • Idempotente — envoyer la même requête PUT plusieurs fois aboutit toujours au même état de ressource
  • Remplace la ressource entière (contrairement à PATCH, qui est partielle)

Exemple :

PUT /api/users/123 HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 52

{
  "name": "Jane Doe",
  "email": "jane@example.com"
}

Cas d’usage : Mise à jour d’un profil utilisateur, remplacement d’un fichier de configuration via API.

DELETE — Supprimer une ressource

Objectif : Supprimer la ressource spécifiée du serveur.

Caractéristiques :

  • Idempotente — supprimer une ressource qui n’existe plus retourne toujours une réponse réussie (ou 404) sans effets secondaires supplémentaires
  • Ne transporte généralement pas de corps de requête

Exemple :

DELETE /api/users/123 HTTP/1.1
Host: api.example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Cas d’usage : Suppression de comptes utilisateur, suppression d’enregistrements, nettoyage de ressources.

PATCH — Mettre à jour partiellement une ressource

Objectif : Appliquer des modifications partielles à une ressource existante, en mettant à jour uniquement les champs spécifiés.

Caractéristiques :

  • Pas nécessairement idempotente — selon l’implémentation, les appels répétés peuvent avoir des effets différents
  • Plus efficace en bande passante que PUT pour les petites mises à jour

Exemple :

PATCH /api/users/123 HTTP/1.1
Host: api.example.com
Content-Type: application/json
Content-Length: 34

{
  "email": "jane.doe@example.com"
}

Cas d’usage : Mise à jour d’un seul champ (par exemple, adresse e-mail), basculement d’un drapeau de statut.

Autres méthodes HTTP notables

MéthodeObjectif
HEADIdentique à GET mais retourne uniquement les en-têtes, pas le corps — utile pour vérifier l’existence de la ressource ou les métadonnées
OPTIONSRetourne les méthodes HTTP supportées par le serveur pour une URL spécifique — utilisée dans les requêtes de pré-vol CORS
CONNECTÉtablit un tunnel vers le serveur (utilisé pour HTTPS via les proxies)
TRACERenvoie la requête reçue au client — principalement à des fins de diagnostic

Effectuer des requêtes HTTP dans Linux : outils et exemples

Linux offre un écosystème riche d’outils en ligne de commande pour créer, envoyer et analyser les requêtes HTTP. Voici les plus importants que tout administrateur et développeur devrait connaître.

1. curl — Le couteau suisse du HTTP

curl est l’outil en ligne de commande le plus largement utilisé pour transférer des données sur HTTP, HTTPS, FTP et des dizaines d’autres protocoles. Il est pré-installé sur pratiquement toutes les distributions Linux et est indispensable pour les tests d’API, les scripts et l’automatisation.

Requête GET basique :

curl -X GET https://api.example.com/users

Requête GET avec sortie détaillée (affiche les en-têtes) :

curl -v https://api.example.com/users

Requête POST avec un corps JSON :

curl -X POST https://api.example.com/users 
  -H "Content-Type: application/json" 
  -d '{"name": "John Doe", "email": "john@example.com"}'

Requête PUT pour mettre à jour une ressource :

curl -X PUT https://api.example.com/users/123 
  -H "Content-Type: application/json" 
  -H "Authorization: Bearer YOUR_TOKEN" 
  -d '{"name": "Jane Doe", "email": "jane@example.com"}'

Requête DELETE :

curl -X DELETE https://api.example.com/users/123 
  -H "Authorization: Bearer YOUR_TOKEN"

Requête PATCH :

curl -X PATCH https://api.example.com/users/123 
  -H "Content-Type: application/json" 
  -d '{"email": "jane.doe@example.com"}'

Enregistrer la réponse dans un fichier :

curl -o output.html https://www.example.com

Suivre automatiquement les redirections :

curl -L https://www.example.com

Drapeaux curl clés à connaître :

DrapeauDescription
-XSpécifie la méthode HTTP
-HAjoute un en-tête de requête
-dEnvoie des données dans le corps de la requête
-oEnregistre la sortie dans un fichier
-vActive le mode détaillé (affiche la requête/réponse complète)
-IRécupère uniquement les en-têtes (requête HEAD)
-LSuit les redirections HTTP
-uFournit le nom d’utilisateur et le mot de passe pour l’authentification basique
--insecureIgnore la vérification du certificat SSL (utiliser uniquement pour les tests)

2. wget — Télécharger des fichiers et des pages

wget est principalement conçu pour télécharger des fichiers et mettre en miroir des sites web. Bien que moins polyvalent que curl pour le travail d’API, il excelle dans les téléchargements récursifs et la reprise des transferts interrompus.

Télécharger un fichier :

wget https://www.example.com/files/archive.zip

Reprendre un téléchargement interrompu :

wget -c https://www.example.com/files/large-file.iso

Télécharger un fichier en arrière-plan :

wget -b https://www.example.com/files/large-file.iso

Mettre en miroir un site web entier :

wget --mirror --convert-links --adjust-extension --page-requisites https://www.example.com

Envoyer une requête POST avec wget :

wget --post-data='{"name":"John"}' 
  --header='Content-Type: application/json' 
  -O response.json 
  https://api.example.com/users

3. HTTPie — Client HTTP convivial

HTTPie est un client HTTP en ligne de commande moderne et convivial conçu pour rendre l’interaction avec les API aussi intuitive que possible. Sa syntaxe propre et sa sortie formatée et colorisée en font un favori parmi les développeurs.

Installer HTTPie :

# Debian/Ubuntu
sudo apt install httpie

# RHEL/CentOS/Fedora
sudo dnf install httpie

Requête GET :

http GET https://api.example.com/users

Requête POST avec JSON (détection automatique du type de contenu) :

http POST https://api.example.com/users 
  name="John Doe" 
  email="john@example.com"

Requête PUT avec authentification :

http PUT https://api.example.com/users/123 
  Authorization:"Bearer YOUR_TOKEN" 
  name="Jane Doe"

Requête DELETE :

http DELETE https://api.example.com/users/123 
  Authorization:"Bearer YOUR_TOKEN"

HTTPie formate automatiquement les réponses JSON avec coloration syntaxique, ce qui rend beaucoup plus facile la lecture des réponses API par rapport à la sortie curl brute.

4. Telnet — Requêtes HTTP brutes pour l’apprentissage

Bien que non pratique pour une utilisation en production, telnet est un excellent outil pédagogique pour comprendre exactement à quoi ressemble une requête HTTP au niveau TCP brut. Il se connecte directement au port 80 et vous permet de taper manuellement les requêtes HTTP.

Se connecter à un serveur :

telnet www.example.com 80

Ensuite, tapez la requête suivante (appuyez sur Entrée deux fois après la dernière ligne) :

GET / HTTP/1.1
Host: www.example.com
Connection: close

Vous verrez la réponse HTTP brute, y compris la ligne d’état, les en-têtes et le corps — exactement comme le serveur l’envoie. Cet exercice est inestimable pour comprendre le protocole à un niveau fondamental.

> Remarque : Pour les connexions HTTPS, utilisez openssl s_client à la place de telnet, car telnet ne peut pas gérer le chiffrement TLS.

Requête HTTPS brute utilisant OpenSSL :

openssl s_client -connect www.example.com:443 -quiet

Ensuite, tapez :

GET / HTTP/1.1
Host: www.example.com
Connection: close

5. Python — Scripts de requêtes HTTP

Pour l’automatisation et les scripts, la bibliothèque requests de Python est l’un des outils les plus populaires pour effectuer des requêtes HTTP par programmation sur Linux.

Installer la bibliothèque requests :

pip install requests

Requête GET :

import requests

response = requests.get('https://api.example.com/users')
print(response.status_code)
print(response.json())

Requête POST :

import requests

payload = {"name": "John Doe", "email": "john@example.com"}
response = requests.post('https://api.example.com/users', json=payload)
print(response.status_code)
print(response.json())

Analyse du trafic HTTP dans Linux

Au-delà de l’envoi de requêtes, Linux fournit des outils puissants pour capturer et analyser le trafic HTTP — des compétences essentielles pour déboguer, optimiser les performances et analyser la sécurité.

tcpdump — Capturer les paquets réseau

tcpdump est un analyseur de paquets en ligne de commande qui capture le trafic réseau brut. Il est disponible sur pratiquement tous les systèmes Linux et nécessite des privilèges root ou sudo.

Capturer tout le trafic HTTP et HTTPS :

sudo tcpdump -i any -A 'tcp port 80 or tcp port 443'

Capturer le trafic sur une interface spécifique et enregistrer dans un fichier :

sudo tcpdump -i eth0 -w capture.pcap 'tcp port 80'

Lire un fichier de capture enregistré :

sudo tcpdump -r capture.pcap

Filtrer le trafic par hôte :

sudo tcpdump -i any host www.example.com

Wireshark — Analyse des paquets GUI

Wireshark est l’analyseur de paquets graphique standard de l’industrie. Vous pouvez capturer le trafic sur votre serveur Linux en utilisant tcpdump et l’enregistrer dans un fichier .pcap, puis l’ouvrir dans Wireshark sur votre station de travail pour une analyse approfondie.

Wireshark vous permet de :

  • Reconstruire les conversations HTTP complètes
  • Filtrer le trafic par protocole, IP, port ou contenu
  • Identifier les goulots d’étranglement des performances et les erreurs
  • Détecter les modèles de trafic suspects ou malveillants

ngrep — Network Grep

ngrep combine la puissance de tcpdump avec la correspondance de motifs de style grep, ce qui facilite la recherche de chaînes spécifiques dans le trafic réseau.

Rechercher les requêtes HTTP GET :

sudo ngrep -d any 'GET' 'tcp port 80'

Rechercher un hôte spécifique dans le trafic :

sudo ngrep -d any 'example.com' 'tcp port 80 or tcp port 443'

Codes de statut HTTP : comprendre les réponses du serveur

Lorsqu’un serveur reçoit votre requête HTTP, il répond avec un code de statut qui vous indique si la requête a réussi, échoué ou nécessite une action supplémentaire. Comprendre ces codes est essentiel pour déboguer.

Plage de codesCatégorieExemples courants
1xxInformatif100 Continue, 101 Switching Protocols
2xxSuccès200 OK, 201 Created, 204 No Content
3xxRedirection301 Moved Permanently, 302 Found, 304 Not Modified
4xxErreur client400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found
5xxErreur serveur500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable

Sécuriser les requêtes HTTP : HTTPS et SSL/TLS

Dans les environnements de production, tout le trafic HTTP doit être chiffré en utilisant HTTPS (HTTP sur TLS/SSL). Envoyer des identifiants, des jetons API ou toute donnée sensible sur du HTTP brut l’expose à l’interception par quiconque sur le chemin du réseau.

Lorsque vous travaillez avec curl, utilisez toujours les URL https://. Si vous rencontrez des erreurs de certificat SSL en développement, vous pouvez contourner temporairement la vérification avec --insecure, mais ne faites jamais cela en production.

Pour vérifier le certificat SSL d’un serveur à partir de la ligne de commande :

curl -vI https://www.example.com 2>&1 | grep -A 10 "SSL certificate"

Ou utilisez OpenSSL directement :

openssl s_client -connect www.example.com:443 -showcerts

Si vous hébergez des applications web et avez besoin de les sécuriser avec un certificat SSL de confiance, AlexHost propose des Certificats SSL faciles à installer et compatibles avec tous les serveurs web majeurs, notamment Apache, Nginx et LiteSpeed.

Cas d’usage pratiques pour les outils HTTP Linux

Surveillance de la santé du serveur

Utilisez curl dans une tâche cron ou un script de surveillance pour vérifier si votre application web répond correctement :

#!/bin/bash
STATUS=$(curl -o /dev/null -s -w "%{http_code}" https://www.example.com/health)
if [ "$STATUS" != "200" ]; then
  echo "ALERT: Server returned HTTP $STATUS" | mail -s "Health Check Failed" admin@example.com
fi

Test des points de terminaison API pendant le développement

Lors de la construction ou du débogage des API REST sur votre serveur, curl et HTTPie vous permettent de tester chaque point de terminaison directement à partir du terminal sans avoir besoin d’un outil GUI comme Postman.

Automatiser les téléchargements de fichiers

Utilisez wget ou curl dans les scripts shell pour automatiser le téléchargement de paquets logiciels, de fichiers de configuration ou de sauvegardes à partir de serveurs distants.

Déboguer la configuration du serveur web

Utilisez curl -v pour inspecter les en-têtes exacts que votre serveur web retourne — utile pour vérifier les en-têtes CORS, les politiques de contrôle du cache, les en-têtes de sécurité (comme Strict-Transport-Security) et le comportement de redirection.

curl -v -I https://www.example.com 2>&1 | grep -E "< (HTTP|Server|X-|Strict|Content)"

Choisir le bon environnement d’hébergement pour le développement web

Les outils et techniques couverts dans ce guide sont les plus puissants lorsque vous avez un contrôle total sur votre environnement serveur. Un plan

15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer