Pack Camo

Коди стану HTTP

Усі коди стану HTTP: що означають і коли їх застосовувати, з пошуком.

Усе виконується локально — нічого не надсилається на сервер.

2xx · Успіх

200 OK

Зареєстровано в IANAКешується за замовчуванням

Що означає

The request succeeded. The body holds the result: the resource for GET, the outcome of the action for POST.

Коли використовувати

The default success response. Prefer 201 when something was created and 204 when there is nothing to return.

Визначено в

RFC 9110 §15.3.1(відкривається в новій вкладці)

Рядок стану

HTTP/1.1 200 OK

HTTP/2 і HTTP/3 передають лише число в псевдозаголовку :status; пояснювальна фраза (reason phrase) існує тільки в HTTP/1.x.

Усі коди стану HTTP: що вони означають і коли їх надсилати

Це довідник із пошуком за всіма стандартними кодами стану відповіді HTTP з реєстру IANA, від <code>100 Continue</code> до <code>511 Network Authentication Required</code>. Для кожного коду є пояснення простою мовою, порада, коли сервер чи API має його надсилати, заголовки відповіді, що йдуть разом із ним, і посилання на RFC, який його визначає. Поширені неофіційні коди — <code>499</code> від nginx, <code>419</code> від Laravel, <code>520</code>–<code>526</code> від Cloudflare — теж є в списку й чітко позначені. Шукайте за номером, назвою або ключовим словом, як-от "redirect" чи "rate limit".

Як знайти код стану

  1. 1Введіть код (404), його початок (40), клас (4xx), назву (teapot) або ключове слово (rate limit, cache, Retry-After).
  2. 2Звузьте список до одного класу фільтрами 1xx–5xx або приховайте неофіційні коди.
  3. 3Виберіть код — мишею або клавішами зі стрілками, — щоб побачити, що він означає, коли його застосовувати, пов'язані заголовки та специфікацію.
  4. 4Скопіюйте код або повний рядок стану чи поділіться URL сторінки: він закінчується на #404 і відкривається одразу на цьому коді.

П'ять класів кодів стану

Клієнт, який отримав незнайомий код, обробляє його як код x00 того ж класу, тож невідомий 499 обробляється як 400, а невідомий 299 — як 200. Саме тому нові коди можна запроваджувати, не ламаючи старе програмне забезпечення.

1xx Інформаційні
Проміжні відповіді, що надходять перед остаточною: 100 Continue, 101 Switching Protocols для WebSocket, 103 Early Hints для попереднього завантаження.
2xx Успіх
Запит виконано. 200 OK — типова відповідь; 201 Created і 204 No Content точніше описують, що сталося.
3xx Перенаправлення
Клієнт має шукати деінде, зазвичай за URL із заголовка Location, а у випадку 304 Not Modified — використати свою копію з кешу.
4xx Помилка клієнта
Запит був неправильний: некоректний, без автентифікації, заборонений, до чогось, чого не існує, або надто частий. Повтор без змін не допоможе.
5xx Помилка сервера
Запит міг бути правильним, але сервер або щось за ним дало збій. Часто це тимчасово, і варто повторити спробу зі зростаючою затримкою (back-off).

Як вибрати правильний код для API

Більшості API досить десятка кодів. Для успіху: 200 із тілом, 201 із заголовком Location, коли щось створено, 202, коли роботу буде виконано пізніше, і 204, коли нічого повертати. Для помилок клієнта: 400 для некоректних запитів, 422 для правильно сформованих даних, що не пройшли валідацію, 401, коли облікових даних немає або вони недійсні, 403, коли вони дійсні, але їх недостатньо, 404 для невідомих ресурсів, 409 для конфліктів, як-от повторна email-адреса, і 429 для обмеження частоти запитів. Для помилок сервера: 500 для багів, а 502, 503 і 504 — для збоїв у проміжній інфраструктурі.

Який би не був код, повертайте тіло, що його пояснює. RFC 9457 "Problem Details" (application/problem+json) задає такому тілу стандартну форму з полями type, title, status і detail. Ніколи не повертайте 200 з помилкою всередині тіла: кеші, моніторинг і логіка повторних спроб читають код стану, а не ваш JSON. Щоб відформатувати таке тіло, скористайтеся JSON-форматером.

Коди, які часто плутають

401 vs 403
401 Unauthorized означає «я не знаю, хто ви»: увійдіть або надішліть дійсний токен. 403 Forbidden означає «я знаю, хто ви, і вам це заборонено».
301 vs 302 vs 307 vs 308
301 і 308 постійні й передають позиції в пошуку новому URL; 302 і 307 тимчасові. 307 і 308 гарантують, що метод і тіло залишаться тими самими, тоді як браузери перетворюють POST на GET при 301 і 302.
400 vs 422
400 — для запитів, які сервер узагалі не може розібрати; 422 — для валідного JSON, вміст якого порушує правила, наприклад бракує обов'язкового поля.
404 vs 410
404 каже, що тут зараз нічого немає; 410 каже, що щось було і його навмисно видалили, тож пошукові системи прибирають сторінку швидше.
502 vs 504
Обидва надходять від проксі або балансувальника навантаження. 502 означає, що upstream відповів чимось некоректним або закрив з'єднання; 504 — що він не відповів вчасно.
500 vs 503
500 — це неочікуваний збій, зазвичай баг. 503 — відомий тимчасовий стан, як-от обслуговування чи перевантаження, і до нього варто додати Retry-After.

Коди стану та SEO

Пошукові системи уважно читають коди стану. Використовуйте 301 або 308, коли сторінка переїжджає назавжди, щоб її позиції переїхали разом із нею; 302 повідомляє, що індексувати слід і далі старий URL. Для відсутніх сторінок віддавайте справжній 404 або 410: сторінка «не знайдено», що повертає 200, — це «soft 404», яка марнує краулінговий бюджет. Під час обслуговування повертайте 503 із Retry-After, щоб сторінки не випали з індексу. Визначте, що можна відвідувати пошуковим роботам, за допомогою генератора robots.txt.

Відповіді з кодами 200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414, 451 і 501 браузери та CDN можуть кешувати навіть без явних заголовків свіжості, тож випадковий 404 чи 301 може затриматися надовго; задавайте Cache-Control для них свідомо.

Неофіційні коди, які ви побачите в логах

Деяких кодів немає в реєстрі IANA, але на практиці вони поширені. nginx записує 499, коли клієнт обриває з'єднання до відповіді, і 444, коли nginx закрив з'єднання, нічого не відповівши. Cloudflare повертає 520–526, коли не може отримати нормальну відповідь від сервера-джерела (origin): 521 означає, що origin відхилив з'єднання, 522 — що минув час очікування, 524 — що відповідь забрала понад 100 секунд, а 525/526 — що не вдалося встановити TLS із origin. Laravel надсилає 419, коли закінчився термін дії CSRF-токена. У списку ці коди позначено як «неофіційні», і їх можна приховати.

Поширені запитання

Що таке код стану HTTP?
Тризначне число на початку кожної відповіді HTTP, яке повідомляє клієнтові, як пройшов запит. Перша цифра вказує клас: 1xx інформаційні, 2xx успіх, 3xx перенаправлення, 4xx помилка клієнта і 5xx помилка сервера.
Яка різниця між 401 і 403?
401 Unauthorized означає, що в запиті немає дійсних облікових даних, тож вхід може допомогти. 403 Forbidden означає, що сервер знає, хто ви, але у вас немає дозволу, тож повторний вхід не допоможе.
Який редирект використовувати: 301 чи 302?
Використовуйте 301 (або 308), коли переїзд постійний, наприклад змінився URL або домен; пошукові системи передають позиції сторінки новій адресі. Використовуйте 302 (або 307), коли початковий URL ще повернеться.
Що означає 429 Too Many Requests?
Клієнт перевищив ліміт запитів. Зачекайте перед повтором: заголовок Retry-After, якщо він є, вказує, скільки секунд чекати або до якого часу. Клієнтам варто збільшувати паузу експоненційно, а не повторювати запит одразу.
Чому виникає помилка 502 Bad Gateway?
Проксі, балансувальник навантаження або CDN перед сайтом отримав некоректну відповідь від сервера за ним — зазвичай тому, що застосунок впав, перезапустився або закрив з'єднання. Виправляти треба на боці сервера, у логах upstream-застосунку.
Що таке код стану 499?
Специфічний для nginx код, який записується, коли клієнт закрив з'єднання раніше, ніж nginx встиг надіслати відповідь. Клієнт його ніколи не отримує. Багато 499 зазвичай означає, що бекенд надто повільний і клієнти не дочікуються.
418 I'm a teapot — це справжній код стану?
Він з'явився як першоквітневий жарт у RFC 2324 (1998). Він не призначений для реального використання, але оскільки багато програм його реалізують, RFC 9110 резервує 418, щоб його ніколи не призначили для чогось іншого.
Скільки всього кодів стану HTTP?
Реєстр IANA визначає близько 63 кодів, включно з кількома зарезервованими або застарілими, як-от 306 і 305. Можливі коди від 100 до 599, і клієнти обробляють будь-який невідомий код як код x00 його класу.