Aller au contenu
Sommaire

Fiche mémo HTTP et API REST

Fiche mémo · environ 6 min de lecture

Validé

Validé. Ce site n’exécute aucune commande. 0 point non vérifié · Sources

Cycle et vocabulaire

Une requête HTTP : méthode (GET, POST, PUT, DELETE), cible (chemin, requête), en-têtes, corps. Une réponse : code d'état (2xx, 3xx, 4xx, 5xx), en-têtes, corps.

HTTP est sans état : chaque requête porte ses justificatifs (jeton, clé).

Notions clés : sûr (lecture seule), idempotent (plusieurs appels = un seul effet).

Méthodes et idempotence

MéthodeUsageSûrIdempotent
GETlireouioui
HEADen-têtes seulsouioui
POSTcréer, déclenchernonnon
PUTremplacernonoui
DELETEsupprimernonoui
PATCHmodifier en partienondépend

Codes d'état principaux

CodeSens
200OK
201Created (+ Location)
204No Content (succès sans corps)
301, 302redirection permanent/temporaire
304Not Modified (cache valide)
400Bad Request (client)
401Unauthorized (identité manquante)
403Forbidden (droits insuffisants)
404Not Found
409Conflict
415Unsupported Media Type
422Unprocessable Content (validation)
429Too Many Requests
500, 502, 503erreur serveur / intermédiaire

En-têtes courants

En-têteDirectionRôle
Host→nom du serveur
Accept→formats acceptés (application/json)
Content-Type↔format du corps
Authorization→justificatif (Bearer <JETON>, Basic …)
Cache-Control←max-age=N, no-store, private
ETag, Last-Modified←version pour validation cache
Location←adresse d'une ressource créée
Retry-After←délai avant réessai
Set-Cookie, Cookie↔état persistant
Origin, Access-Control-*↔CORS

→ = requête, ← = réponse, ↔ = les deux.

Versions HTTP

VersionRFCTransportIdée
HTTP/1.19112TCP, texteUn message à la fois
HTTP/29113TCP, binaireMultiplexage, compression en-têtes
HTTP/39114QUIC (UDP)Multiplexage par flux

HTTPS : HTTP + TLS (voir cours « Chiffrement »).

REST : ressources et conventions

OpérationMéthodeCheminSuccès
ListerGET/v1/ressources200
LireGET/v1/ressources/42200
CréerPOST/v1/ressources201 + Location
RemplacerPUT/v1/ressources/42200 ou 204
ModifierPATCH/v1/ressources/42200 ou 204
SupprimerDELETE/v1/ressources/42204

Erreur normalisée (RFC 9457, application/problem+json) :

JSON
{"type": "…", "title": "…", "status": 429, "detail": "…"}

JSON et pagination

JSON (RFC 8259) : objets, tableaux, chaînes, nombres, booléens, null. UTF-8 obligatoire.

Pagination : par décalage (?limite=50&decalage=100) ou par curseur (?apres=<curseur>).

Cookies

Set-Cookie avec attributs : Secure, HttpOnly, SameSite, Max-Age, Domain, Path.

Les cookies sont des secrets au même titre que des mots de passe.

Cache

  • Cache-Control: max-age=N : fraîcheur en secondes
  • no-store : ne pas stocker
  • private : cache local seul (données personnelles)
  • ETag / Last-Modified : validation ; client renvoie If-None-Match / If-Modified-Since ; serveur répond 304

Données personnelles : toujours private ou no-store.

Authentification des appels

MécanismeFormatPoints clés
Clé d'APIAuthorization: <CLE> (en-tête)scope réduit, rotation
BasicAuthorization: Basic <base64(user:pwd)>seulement en TLS
Jeton BearerAuthorization: Bearer <JETON>durée courte, révocation
OAuth 2.0jeton émis par serveur d'autorisationdélégation, scope
OpenID ConnectID Token JWT au-dessus d'OAuth 2.0authentification, vérifier la signature

Encadré secrets.

Attention : secret ne va jamais dans une URL, un journal, une capture ou Git. Passer par l'en-tête Authorization, stocker en Trousseau, faire tourner, révoquer en cas de doute.

CORS

  • Requête simple (GET, HEAD, POST) : pas de contrôle préalable
  • Preflight (OPTIONS) : pour méthodes/en-têtes personnalisés
  • Réponse : Access-Control-Allow-Origin, -Methods, -Headers, -Credentials
  • Avec identifiants : Origin nommée, pas *, + -Credentials: true

CORS appliqué par le navigateur ; curl ignore. L'API doit toujours authentifier côté serveur.

Limitation de débit

Réponse 429 quand limite atteinte. Reessai avec délai croissant (exponentiel + aléa), jamais en boucle serrée.

Limiter par clé, adresse, route sensible, au niveau proxy.

curl (lecture seule)

Service jetable (boucle locale, 127.0.0.1, quelques secondes) :

Attention, effet notable. Cette commande peut écrire ou écraser un fichier. Lire le contexte, les droits et l’effet attendu indiqués après le bloc ; ne jamais l’exécuter sur un système réel sans validation, d’abord dans un environnement de test.

Terminal
DEMO="$(mktemp -d)" && cd "$DEMO"echo '{"id": 42}' > test.jsonpython3 -m http.server 8080 --bind 127.0.0.1
  • Contexte : Terminal sur une machine de démonstration.
  • Droits : utilisateur.
  • Effet : crée un dossier temporaire, y ajoute un fichier JSON, lance un serveur HTTP jetable.
  • Vérification : curl -s http://127.0.0.1:8080/test.json | jq retourne {"id": 42}.
  • Retour arrière : Control-C arrête le serveur ; rm -r "$DEMO" efface le dossier.

Lecture :

Terminal
curl -v http://127.0.0.1:8080/test.jsoncurl -sI http://127.0.0.1:8080/test.jsoncurl -s http://127.0.0.1:8080/test.json | jq '.id'curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/absent.jsoncurl -v --resolve api.example.test:8080:127.0.0.1 http://api.example.test:8080/test.json
  • Contexte : Terminal ; curl 8.23.0, jq 1.8, python3 non vérifiés.
  • Droits : utilisateur.
  • Effet : quelques requêtes vers la boucle locale, lecture seule.
  • Vérification : voir les en-têtes, codes, réponses JSON.
  • Retour arrière : Control-C, puis rm -r "$DEMO".

Options curl : -v (détail), -i (en-têtes + corps), -I (en-têtes seuls), -s (silencieux), -H (en-tête custom), -X (méthode), --json (type JSON), -w (format sortie), -o (fichier).

jq : ., .clé, .[], select(…) ; options -r (texte brut), -c (compact), -e (code sortie).

OWASP API Security Top 10 (2023)

RisqueDéfense en une phrase
API1 Broken Object Level Authorizationvérifier l'accès à chaque objet
API2 Broken Authenticationjetons courts, MFA, limite d'essais
API3 Broken Object Property Level Authorizationn'exposer que les champs autorisés
API4 Unrestricted Resource Consumptionlimiter débit, taille, pagination, délais
API5 Broken Function Level Authorizationséparer et contrôler les routes d'admin
API6 Unrestricted Access to Sensitive Flowslimiter l'automatisation (achat, inscription)
API7 Server Side Request Forgeryvalider les URL à appeler
API8 Security Misconfigurationdurcissement, CORS strict, en-têtes de sécurité
API9 Improper Inventory Managementinventaire des API et versions
API10 Unsafe Consumption of APIstraiter les réponses tierces comme non fiables

Renvois

Chiffrement et TLS : cours « Chiffrement et cryptographie ». Authentification centralisée (OAuth, SAML, OIDC) : cours « Annuaires et identités ».

Points non vérifiés

Versions curl, jq, python3, macOS. Options de python3 -m http.server. RFC 9110 (tableau sûr/idempotent, codes 422, etc.) : titres et résumés seuls. PATCH (RFC 5789), .test (RFC 6761), RFC 6265 (cookies, peut être obsolète). Conventions REST (versionnement, pagination, clés d'idempotence) : non normalisées. OpenAPI 3.2.1, résumés de pages web : lus par outil. JWT, PKCE, DPoP, mTLS : non lus. Détails des dix risques OWASP : seuls intitulés lus.

Sources

Consultées le 18 octobre 2026.