Codes de statut HTTP
Référence cherchable de chaque code de statut HTTP — 1xx à 5xx, RFC 7231 et au-delà.
100 Continue #
Réponse intermédiaire signalant que le serveur a reçu les en-têtes de la requête et que le client doit poursuivre l'envoi du corps. Définie dans la RFC 9110 section 15.2.1.
curl -i -X HEAD https://example.com/path # HTTP/1.1 100 Continue
import requests
r = requests.get("https://example.com/path")
if r.status_code == 100:
print("Continue")
const r = await fetch("https://example.com/path");
if (r.status === 100) {
console.log("Continue");
}
// Laravel / generic PHP return response()->json(['ok' => false], 100); // or: http_response_code(100);
101 Switching Protocols #
Le serveur accepte la demande de changement de protocole demandée via l'en-tête Upgrade. Définie dans la RFC 9110 section 15.2.2.
curl -i -X HEAD https://example.com/path # HTTP/1.1 101 Switching Protocols
import requests
r = requests.get("https://example.com/path")
if r.status_code == 101:
print("Switching Protocols")
const r = await fetch("https://example.com/path");
if (r.status === 101) {
console.log("Switching Protocols");
}
// Laravel / generic PHP return response()->json(['ok' => false], 101); // or: http_response_code(101);
200 OK #
La requête a réussi. Le sens dépend de la méthode HTTP. Définie dans la RFC 9110 section 15.3.1.
curl -i -X HEAD https://example.com/path # HTTP/1.1 200 OK
import requests
r = requests.get("https://example.com/path")
if r.status_code == 200:
print("OK")
const r = await fetch("https://example.com/path");
if (r.status === 200) {
console.log("OK");
}
// Laravel / generic PHP return response()->json(['ok' => false], 200); // or: http_response_code(200);
201 Created #
La requête a abouti et a créé une nouvelle ressource. L'URL de la nouvelle ressource doit figurer dans l'en-tête Location. Définie dans la RFC 9110 section 15.3.2.
curl -i -X HEAD https://example.com/path # HTTP/1.1 201 Created
import requests
r = requests.get("https://example.com/path")
if r.status_code == 201:
print("Created")
const r = await fetch("https://example.com/path");
if (r.status === 201) {
console.log("Created");
}
// Laravel / generic PHP return response()->json(['ok' => false], 201); // or: http_response_code(201);
202 Accepted #
La requête a été acceptée pour traitement, mais ce dernier n'est pas terminé. Définie dans la RFC 9110 section 15.3.3.
curl -i -X HEAD https://example.com/path # HTTP/1.1 202 Accepted
import requests
r = requests.get("https://example.com/path")
if r.status_code == 202:
print("Accepted")
const r = await fetch("https://example.com/path");
if (r.status === 202) {
console.log("Accepted");
}
// Laravel / generic PHP return response()->json(['ok' => false], 202); // or: http_response_code(202);
204 No Content #
La requête a réussi, mais il n'y a pas de corps à renvoyer. Définie dans la RFC 9110 section 15.3.5.
curl -i -X HEAD https://example.com/path # HTTP/1.1 204 No Content
import requests
r = requests.get("https://example.com/path")
if r.status_code == 204:
print("No Content")
const r = await fetch("https://example.com/path");
if (r.status === 204) {
console.log("No Content");
}
// Laravel / generic PHP return response()->json(['ok' => false], 204); // or: http_response_code(204);
206 Partial Content #
Le serveur n'envoie qu'une partie de la ressource, comme demandé via Range. Définie dans la RFC 9110 section 15.3.7.
curl -i -X HEAD https://example.com/path # HTTP/1.1 206 Partial Content
import requests
r = requests.get("https://example.com/path")
if r.status_code == 206:
print("Partial Content")
const r = await fetch("https://example.com/path");
if (r.status === 206) {
console.log("Partial Content");
}
// Laravel / generic PHP return response()->json(['ok' => false], 206); // or: http_response_code(206);
301 Moved Permanently #
La ressource a une nouvelle URL définitive ; les clients devraient mettre à jour leurs liens. Définie dans la RFC 9110 section 15.4.2.
curl -i -X HEAD https://example.com/path # HTTP/1.1 301 Moved Permanently
import requests
r = requests.get("https://example.com/path")
if r.status_code == 301:
print("Moved Permanently")
const r = await fetch("https://example.com/path");
if (r.status === 301) {
console.log("Moved Permanently");
}
// Laravel / generic PHP return response()->json(['ok' => false], 301); // or: http_response_code(301);
302 Found #
La ressource est temporairement disponible à une autre URL. Définie dans la RFC 9110 section 15.4.3.
curl -i -X HEAD https://example.com/path # HTTP/1.1 302 Found
import requests
r = requests.get("https://example.com/path")
if r.status_code == 302:
print("Found")
const r = await fetch("https://example.com/path");
if (r.status === 302) {
console.log("Found");
}
// Laravel / generic PHP return response()->json(['ok' => false], 302); // or: http_response_code(302);
303 See Other #
Le client doit récupérer la ressource via GET à une autre URL. Définie dans la RFC 9110 section 15.4.4.
curl -i -X HEAD https://example.com/path # HTTP/1.1 303 See Other
import requests
r = requests.get("https://example.com/path")
if r.status_code == 303:
print("See Other")
const r = await fetch("https://example.com/path");
if (r.status === 303) {
console.log("See Other");
}
// Laravel / generic PHP return response()->json(['ok' => false], 303); // or: http_response_code(303);
304 Not Modified #
La ressource n'a pas changé depuis la dernière requête conditionnelle ; le client peut servir sa version en cache. Définie dans la RFC 9110 section 15.4.5.
curl -i -X HEAD https://example.com/path # HTTP/1.1 304 Not Modified
import requests
r = requests.get("https://example.com/path")
if r.status_code == 304:
print("Not Modified")
const r = await fetch("https://example.com/path");
if (r.status === 304) {
console.log("Not Modified");
}
// Laravel / generic PHP return response()->json(['ok' => false], 304); // or: http_response_code(304);
307 Temporary Redirect #
Comme 302 mais préserve explicitement la méthode et le corps de la requête. Définie dans la RFC 9110 section 15.4.8.
curl -i -X HEAD https://example.com/path # HTTP/1.1 307 Temporary Redirect
import requests
r = requests.get("https://example.com/path")
if r.status_code == 307:
print("Temporary Redirect")
const r = await fetch("https://example.com/path");
if (r.status === 307) {
console.log("Temporary Redirect");
}
// Laravel / generic PHP return response()->json(['ok' => false], 307); // or: http_response_code(307);
308 Permanent Redirect #
Comme 301 mais préserve explicitement la méthode et le corps. Définie dans la RFC 7538.
curl -i -X HEAD https://example.com/path # HTTP/1.1 308 Permanent Redirect
import requests
r = requests.get("https://example.com/path")
if r.status_code == 308:
print("Permanent Redirect")
const r = await fetch("https://example.com/path");
if (r.status === 308) {
console.log("Permanent Redirect");
}
// Laravel / generic PHP return response()->json(['ok' => false], 308); // or: http_response_code(308);
400 Bad Request #
Le serveur ne peut pas traiter la requête à cause d'une syntaxe invalide ou d'un payload mal formé. Définie dans la RFC 9110 section 15.5.1.
curl -i -X HEAD https://example.com/path # HTTP/1.1 400 Bad Request
import requests
r = requests.get("https://example.com/path")
if r.status_code == 400:
print("Bad Request")
const r = await fetch("https://example.com/path");
if (r.status === 400) {
console.log("Bad Request");
}
// Laravel / generic PHP return response()->json(['ok' => false], 400); // or: http_response_code(400);
401 Unauthorized #
L'authentification est requise et a échoué ou n'a pas été fournie. La réponse doit inclure un en-tête WWW-Authenticate. Définie dans la RFC 9110 section 15.5.2.
curl -i -X HEAD https://example.com/path # HTTP/1.1 401 Unauthorized
import requests
r = requests.get("https://example.com/path")
if r.status_code == 401:
print("Unauthorized")
const r = await fetch("https://example.com/path");
if (r.status === 401) {
console.log("Unauthorized");
}
// Laravel / generic PHP return response()->json(['ok' => false], 401); // or: http_response_code(401);
403 Forbidden #
Le serveur a compris la requête mais refuse de l'exécuter. L'authentification ne changera pas l'issue. Définie dans la RFC 9110 section 15.5.4.
curl -i -X HEAD https://example.com/path # HTTP/1.1 403 Forbidden
import requests
r = requests.get("https://example.com/path")
if r.status_code == 403:
print("Forbidden")
const r = await fetch("https://example.com/path");
if (r.status === 403) {
console.log("Forbidden");
}
// Laravel / generic PHP return response()->json(['ok' => false], 403); // or: http_response_code(403);
404 Not Found #
Le serveur n'a rien trouvé qui corresponde à l'URI de la requête. Définie dans la RFC 9110 section 15.5.5.
curl -i -X HEAD https://example.com/path # HTTP/1.1 404 Not Found
import requests
r = requests.get("https://example.com/path")
if r.status_code == 404:
print("Not Found")
const r = await fetch("https://example.com/path");
if (r.status === 404) {
console.log("Not Found");
}
// Laravel / generic PHP return response()->json(['ok' => false], 404); // or: http_response_code(404);
405 Method Not Allowed #
La méthode HTTP n'est pas prise en charge pour cette ressource. La réponse doit inclure un en-tête Allow. Définie dans la RFC 9110 section 15.5.6.
curl -i -X HEAD https://example.com/path # HTTP/1.1 405 Method Not Allowed
import requests
r = requests.get("https://example.com/path")
if r.status_code == 405:
print("Method Not Allowed")
const r = await fetch("https://example.com/path");
if (r.status === 405) {
console.log("Method Not Allowed");
}
// Laravel / generic PHP return response()->json(['ok' => false], 405); // or: http_response_code(405);
406 Not Acceptable #
Le serveur ne peut pas produire de réponse correspondant à l'en-tête Accept du client. Définie dans la RFC 9110 section 15.5.7.
curl -i -X HEAD https://example.com/path # HTTP/1.1 406 Not Acceptable
import requests
r = requests.get("https://example.com/path")
if r.status_code == 406:
print("Not Acceptable")
const r = await fetch("https://example.com/path");
if (r.status === 406) {
console.log("Not Acceptable");
}
// Laravel / generic PHP return response()->json(['ok' => false], 406); // or: http_response_code(406);
408 Request Timeout #
Le serveur a fermé la connexion après avoir attendu trop longtemps une requête complète. Définie dans la RFC 9110 section 15.5.9.
curl -i -X HEAD https://example.com/path # HTTP/1.1 408 Request Timeout
import requests
r = requests.get("https://example.com/path")
if r.status_code == 408:
print("Request Timeout")
const r = await fetch("https://example.com/path");
if (r.status === 408) {
console.log("Request Timeout");
}
// Laravel / generic PHP return response()->json(['ok' => false], 408); // or: http_response_code(408);
409 Conflict #
La requête est en conflit avec l'état actuel de la ressource. Définie dans la RFC 9110 section 15.5.10.
curl -i -X HEAD https://example.com/path # HTTP/1.1 409 Conflict
import requests
r = requests.get("https://example.com/path")
if r.status_code == 409:
print("Conflict")
const r = await fetch("https://example.com/path");
if (r.status === 409) {
console.log("Conflict");
}
// Laravel / generic PHP return response()->json(['ok' => false], 409); // or: http_response_code(409);
410 Gone #
La ressource a été supprimée définitivement et ne reviendra pas. Définie dans la RFC 9110 section 15.5.11.
curl -i -X HEAD https://example.com/path # HTTP/1.1 410 Gone
import requests
r = requests.get("https://example.com/path")
if r.status_code == 410:
print("Gone")
const r = await fetch("https://example.com/path");
if (r.status === 410) {
console.log("Gone");
}
// Laravel / generic PHP return response()->json(['ok' => false], 410); // or: http_response_code(410);
411 Length Required #
Le serveur exige un en-tête Content-Length. Définie dans la RFC 9110 section 15.5.12.
curl -i -X HEAD https://example.com/path # HTTP/1.1 411 Length Required
import requests
r = requests.get("https://example.com/path")
if r.status_code == 411:
print("Length Required")
const r = await fetch("https://example.com/path");
if (r.status === 411) {
console.log("Length Required");
}
// Laravel / generic PHP return response()->json(['ok' => false], 411); // or: http_response_code(411);
413 Content Too Large #
Le payload de la requête dépasse les limites du serveur. Définie dans la RFC 9110 section 15.5.14.
curl -i -X HEAD https://example.com/path # HTTP/1.1 413 Content Too Large
import requests
r = requests.get("https://example.com/path")
if r.status_code == 413:
print("Content Too Large")
const r = await fetch("https://example.com/path");
if (r.status === 413) {
console.log("Content Too Large");
}
// Laravel / generic PHP return response()->json(['ok' => false], 413); // or: http_response_code(413);
414 URI Too Long #
L'URI de la requête est trop longue pour être interprétée. Définie dans la RFC 9110 section 15.5.15.
curl -i -X HEAD https://example.com/path # HTTP/1.1 414 URI Too Long
import requests
r = requests.get("https://example.com/path")
if r.status_code == 414:
print("URI Too Long")
const r = await fetch("https://example.com/path");
if (r.status === 414) {
console.log("URI Too Long");
}
// Laravel / generic PHP return response()->json(['ok' => false], 414); // or: http_response_code(414);
415 Unsupported Media Type #
Le format du payload n'est pas pris en charge par le serveur ou la ressource. Définie dans la RFC 9110 section 15.5.16.
curl -i -X HEAD https://example.com/path # HTTP/1.1 415 Unsupported Media Type
import requests
r = requests.get("https://example.com/path")
if r.status_code == 415:
print("Unsupported Media Type")
const r = await fetch("https://example.com/path");
if (r.status === 415) {
console.log("Unsupported Media Type");
}
// Laravel / generic PHP return response()->json(['ok' => false], 415); // or: http_response_code(415);
418 I'm a teapot #
Code historique issu d'un poisson d'avril (RFC 2324) ; conservé en clin d'œil. Une théière refuse de préparer du café.
curl -i -X HEAD https://example.com/path # HTTP/1.1 418 I'm a teapot
import requests
r = requests.get("https://example.com/path")
if r.status_code == 418:
print("I'm a teapot")
const r = await fetch("https://example.com/path");
if (r.status === 418) {
console.log("I'm a teapot");
}
// Laravel / generic PHP return response()->json(['ok' => false], 418); // or: http_response_code(418);
422 Unprocessable Content #
La syntaxe est correcte mais les données sont sémantiquement invalides. Définie dans la RFC 9110 section 15.5.21.
curl -i -X HEAD https://example.com/path # HTTP/1.1 422 Unprocessable Content
import requests
r = requests.get("https://example.com/path")
if r.status_code == 422:
print("Unprocessable Content")
const r = await fetch("https://example.com/path");
if (r.status === 422) {
console.log("Unprocessable Content");
}
// Laravel / generic PHP return response()->json(['ok' => false], 422); // or: http_response_code(422);
423 Locked #
La ressource source ou destination est verrouillée. Définie dans la RFC 4918 (WebDAV).
curl -i -X HEAD https://example.com/path # HTTP/1.1 423 Locked
import requests
r = requests.get("https://example.com/path")
if r.status_code == 423:
print("Locked")
const r = await fetch("https://example.com/path");
if (r.status === 423) {
console.log("Locked");
}
// Laravel / generic PHP return response()->json(['ok' => false], 423); // or: http_response_code(423);
425 Too Early #
Le serveur ne veut pas traiter une requête qui pourrait être rejouée. Définie dans la RFC 8470.
curl -i -X HEAD https://example.com/path # HTTP/1.1 425 Too Early
import requests
r = requests.get("https://example.com/path")
if r.status_code == 425:
print("Too Early")
const r = await fetch("https://example.com/path");
if (r.status === 425) {
console.log("Too Early");
}
// Laravel / generic PHP return response()->json(['ok' => false], 425); // or: http_response_code(425);
428 Precondition Required #
Le serveur exige une requête conditionnelle pour empêcher les pertes lors de mises à jour concurrentes. Définie dans la RFC 6585.
curl -i -X HEAD https://example.com/path # HTTP/1.1 428 Precondition Required
import requests
r = requests.get("https://example.com/path")
if r.status_code == 428:
print("Precondition Required")
const r = await fetch("https://example.com/path");
if (r.status === 428) {
console.log("Precondition Required");
}
// Laravel / generic PHP return response()->json(['ok' => false], 428); // or: http_response_code(428);
429 Too Many Requests #
Le client a envoyé trop de requêtes dans un laps de temps donné. Définie dans la RFC 6585.
curl -i -X HEAD https://example.com/path # HTTP/1.1 429 Too Many Requests
import requests
r = requests.get("https://example.com/path")
if r.status_code == 429:
print("Too Many Requests")
const r = await fetch("https://example.com/path");
if (r.status === 429) {
console.log("Too Many Requests");
}
// Laravel / generic PHP return response()->json(['ok' => false], 429); // or: http_response_code(429);
431 Request Header Fields Too Large #
Les en-têtes de la requête sont trop longs au total ou individuellement. Définie dans la RFC 6585.
curl -i -X HEAD https://example.com/path # HTTP/1.1 431 Request Header Fields Too Large
import requests
r = requests.get("https://example.com/path")
if r.status_code == 431:
print("Request Header Fields Too Large")
const r = await fetch("https://example.com/path");
if (r.status === 431) {
console.log("Request Header Fields Too Large");
}
// Laravel / generic PHP return response()->json(['ok' => false], 431); // or: http_response_code(431);
451 Unavailable For Legal Reasons #
L'accès à la ressource est refusé pour des raisons légales. Définie dans la RFC 7725.
curl -i -X HEAD https://example.com/path # HTTP/1.1 451 Unavailable For Legal Reasons
import requests
r = requests.get("https://example.com/path")
if r.status_code == 451:
print("Unavailable For Legal Reasons")
const r = await fetch("https://example.com/path");
if (r.status === 451) {
console.log("Unavailable For Legal Reasons");
}
// Laravel / generic PHP return response()->json(['ok' => false], 451); // or: http_response_code(451);
500 Internal Server Error #
Le serveur a rencontré une condition inattendue qui l'empêche de répondre. Définie dans la RFC 9110 section 15.6.1.
curl -i -X HEAD https://example.com/path # HTTP/1.1 500 Internal Server Error
import requests
r = requests.get("https://example.com/path")
if r.status_code == 500:
print("Internal Server Error")
const r = await fetch("https://example.com/path");
if (r.status === 500) {
console.log("Internal Server Error");
}
// Laravel / generic PHP return response()->json(['ok' => false], 500); // or: http_response_code(500);
501 Not Implemented #
Le serveur ne reconnaît pas la méthode de la requête ou ne sait pas la traiter. Définie dans la RFC 9110 section 15.6.2.
curl -i -X HEAD https://example.com/path # HTTP/1.1 501 Not Implemented
import requests
r = requests.get("https://example.com/path")
if r.status_code == 501:
print("Not Implemented")
const r = await fetch("https://example.com/path");
if (r.status === 501) {
console.log("Not Implemented");
}
// Laravel / generic PHP return response()->json(['ok' => false], 501); // or: http_response_code(501);
502 Bad Gateway #
Le serveur, agissant en tant que passerelle ou proxy, a reçu une réponse invalide d'un serveur amont. Définie dans la RFC 9110 section 15.6.3.
curl -i -X HEAD https://example.com/path # HTTP/1.1 502 Bad Gateway
import requests
r = requests.get("https://example.com/path")
if r.status_code == 502:
print("Bad Gateway")
const r = await fetch("https://example.com/path");
if (r.status === 502) {
console.log("Bad Gateway");
}
// Laravel / generic PHP return response()->json(['ok' => false], 502); // or: http_response_code(502);
503 Service Unavailable #
Le serveur n'est pas prêt à traiter la requête, généralement pour cause de surcharge ou de maintenance. Définie dans la RFC 9110 section 15.6.4.
curl -i -X HEAD https://example.com/path # HTTP/1.1 503 Service Unavailable
import requests
r = requests.get("https://example.com/path")
if r.status_code == 503:
print("Service Unavailable")
const r = await fetch("https://example.com/path");
if (r.status === 503) {
console.log("Service Unavailable");
}
// Laravel / generic PHP return response()->json(['ok' => false], 503); // or: http_response_code(503);
504 Gateway Timeout #
La passerelle ou le proxy n'a pas reçu de réponse à temps du serveur amont. Définie dans la RFC 9110 section 15.6.5.
curl -i -X HEAD https://example.com/path # HTTP/1.1 504 Gateway Timeout
import requests
r = requests.get("https://example.com/path")
if r.status_code == 504:
print("Gateway Timeout")
const r = await fetch("https://example.com/path");
if (r.status === 504) {
console.log("Gateway Timeout");
}
// Laravel / generic PHP return response()->json(['ok' => false], 504); // or: http_response_code(504);
505 HTTP Version Not Supported #
La version majeure de HTTP utilisée dans la requête n'est pas prise en charge. Définie dans la RFC 9110 section 15.6.6.
curl -i -X HEAD https://example.com/path # HTTP/1.1 505 HTTP Version Not Supported
import requests
r = requests.get("https://example.com/path")
if r.status_code == 505:
print("HTTP Version Not Supported")
const r = await fetch("https://example.com/path");
if (r.status === 505) {
console.log("HTTP Version Not Supported");
}
// Laravel / generic PHP return response()->json(['ok' => false], 505); // or: http_response_code(505);
511 Network Authentication Required #
Le client doit s'authentifier pour accéder au réseau. Définie dans la RFC 6585.
curl -i -X HEAD https://example.com/path # HTTP/1.1 511 Network Authentication Required
import requests
r = requests.get("https://example.com/path")
if r.status_code == 511:
print("Network Authentication Required")
const r = await fetch("https://example.com/path");
if (r.status === 511) {
console.log("Network Authentication Required");
}
// Laravel / generic PHP return response()->json(['ok' => false], 511); // or: http_response_code(511);
Que sont les codes de statut HTTP ?
Un code de statut HTTP est le nombre à trois chiffres qu'un serveur renvoie au début de chaque réponse. Ils se regroupent en cinq familles : 1xx informationnel, 2xx succès, 3xx redirection, 4xx erreur client et 5xx erreur serveur. Les codes sont définis dans la RFC 9110 (la spécification consolidée de 2022 qui remplace l'ancienne série 7230–7235), avec des extensions dans les RFC 6585 (4xx/5xx supplémentaires), 7725 (451), 4918 (WebDAV) et 8470 (425). Bien lire un statut, c'est la différence entre corriger un bug en cinq minutes et chasser un fantôme tout l'après-midi : un 404 venant de votre CDN signifie que le chemin est faux, un 502 venant de votre proxy signifie que l'application a planté, et un 401 sans en-tête WWW-Authenticate trahit un backend mal configuré. Cette page est un aide-mémoire consultable — chaque carte indique le nom officiel, une description fondée sur les RFC, la cause typique et des extraits de code concrets que vous pouvez coller dans curl, Python, JavaScript ou PHP.
Comment utiliser cette référence
Saisissez un code ou une partie d'un nom dans le champ de recherche, ou filtrez par famille à l'aide des puces. Chaque carte se déplie pour révéler la description technique, les causes fréquentes et un extrait de code dans plusieurs langages que vous pouvez adapter. Chaque code possède sa propre ancre (par ex. #404) afin que vous puissiez créer des liens directs vers un statut précis depuis la documentation de votre équipe.
Familles de codes en un coup d'œil
| Plage | Famille | Signification |
|---|---|---|
| 1xx | Informationnel | Réponses provisoires ; rarement vues côté applicatif. |
| 2xx | Succès | La requête a été reçue, comprise et acceptée. |
| 3xx | Redirection | Une action supplémentaire est nécessaire (URL différente, validation de cache, etc.). |
| 4xx | Erreur client | La requête comportait un problème (entrée invalide, authentification absente, mauvaise méthode). |
| 5xx | Erreur serveur | Le serveur n'a pas réussi à traiter une requête apparemment valide. |