Знайдіть будь-який код стану HTTP: що він означає, коли сервери його надсилають і в якій специфікації його визначено. Шукайте за номером або ключовим словом, фільтруйте за класом і переходьте безпосередньо до потрібного коду за посиланням.
Сервер отримав заголовки запиту, і клієнт може надіслати тіло запиту. Код з’являється, коли клієнт надсилає «Expect: 100-continue» перед завантаженням великого тіла запиту.
Сервер прийняв запит WebDAV, але ще не завершив його обробку. Цей код вилучили з пізніших специфікацій WebDAV, тому сьогодні його використовують рідко.
Надсилається перед остаточною відповіддю, щоб браузер міг почати попереднє завантаження ресурсів, указаних у заголовках Link. Використовується CDN і серверами для пришвидшення завантаження сторінок.
Запит виконано успішно, повертати вміст не потрібно. Часто використовується для запитів DELETE і збереження даних, коли клієнту не потрібне тіло відповіді.
Сервер повертає лише діапазон байтів, запитаний клієнтом. Код з’являється під час потокового відтворення відео, відновлення завантаження або надсилання клієнтом заголовка Range.
Ресурс назавжди переміщено за URL-адресою, указаною в заголовку Location. Браузери й пошукові системи оновлюють свої посилання; деякі клієнти під час переходу змінюють POST на GET.
Ресурс тимчасово доступний за іншою URL-адресою, указаною в заголовку Location. Часто використовується після входу в систему та для короткочасних перенаправлень; браузери зазвичай переходять за ним методом GET.
Клієнту слід отримати результат з іншої URL-адреси методом GET. Використовується після POST-запиту з форми для перенаправлення на сторінку підтвердження (схема Post/Redirect/Get).
Кешована копія ще дійсна, тому сервер не надсилає тіло відповіді. Код з’являється, коли браузер перевіряє актуальність кешованого файла за допомогою If-None-Match або If-Modified-Since.
Ресурс тимчасово доступний за іншою URL-адресою. Клієнт має повторити запит із тим самим методом і тілом. Також браузери використовують цей код для внутрішніх перенаправлень HSTS на HTTPS.
Ресурс переміщено назавжди. Клієнт має використати той самий метод і тіло за новою URL-адресою. Постійний аналог 307, безпечний для перенаправлення запитів POST.
Сервер не може обробити запит, оскільки його сформовано неправильно. Наприклад, у ньому може бути некоректний JSON, неправильний параметр запиту або пошкоджений cookie.
У запиті немає дійсних облікових даних для автентифікації. Попри назву, код означає «не автентифіковано»; сервер надсилає заголовок WWW-Authenticate з описом способу входу.
Сервер зрозумів запит, але відхиляє його. Повторний вхід не допоможе. Таке трапляється, якщо бракує прав доступу, перегляд списку файлів у каталозі вимкнено або брандмауер блокує клієнта.
Ресурс існує, але не підтримує використаний метод HTTP, наприклад POST для URL-адреси, доступної лише для читання. У відповіді в заголовку Allow перелічено дозволені методи.
Як і у випадку з 401, але клієнт має спочатку пройти автентифікацію на проксі-сервері. Таке трапляється в корпоративних мережах із проксі-сервером, що вимагає автентифікації.
Ресурс видалено назавжди й він не з’явиться знову. На відміну від 404, цей код дає пошуковим системам зрозуміти, що URL-адресу потрібно швидше вилучити з індексу.
Умова в заголовках запиту, наприклад If-Match, не виконана. Код використовують, щоб запобігти перезапису ресурсу, який змінився після останнього отримання клієнтом.
Тіло запиту перевищує допустимий для сервера розмір. Таке трапляється під час завантаження файла, розмір якого перевищує обмеження, наприклад client_max_body_size у nginx.
URL-адреса довша, ніж може обробити сервер. Зазвичай це трапляється, коли форма надсилає забагато даних методом GET або цикл перенаправлень постійно додає параметри.
Жарт до Дня сміху з протоколу Hyper Text Coffee Pot Control Protocol 1998 року: чайник відмовляється варити каву. У HTTP цей код зарезервовано як невикористовуваний, але деякі сервери повертають його як сюрприз або для блокування небажаних ботів.
Запит сформовано правильно, але його вміст некоректний, наприклад дані форми не пройшли перевірку. API часто використовують цей код для помилок перевірки даних.
Клієнт надіслав забагато запитів за певний проміжок часу. API використовують цей код для обмеження частоти запитів і часто додають заголовок Retry-After, який указує, коли можна спробувати знову.
Нестандартний код. nginx використовує його внутрішньо, щоб закрити з’єднання без відповіді, часто для відкидання небажаного трафіку. Клієнти насправді його не отримують.
Нестандартний код. nginx записує його в журнал, якщо клієнт закрив з’єднання до відповіді сервера, наприклад коли користувач скасував повільне завантаження сторінки або сплив час очікування на клієнті.
На сервері сталася неочікувана помилка, тому він не зміг завершити запит. Загальна помилка, спричинена багом, збоєм або неправильною конфігурацією; подробиці є в журналі сервера.
Шлюз або проксі-сервер отримав некоректну відповідь від сервера вище за ланцюжком. Таке часто трапляється, коли програма за nginx або балансувальником навантаження аварійно завершує роботу чи перезапускається.
Сервер тимчасово не може обробити запит через надмірне навантаження або технічне обслуговування. Заголовок Retry-After може вказувати, коли можна спробувати знову.
Шлюз або проксі-сервер не дочекався відповіді від сервера-джерела. Таке трапляється, коли запит до бекенду виконується надто довго, наприклад через тривалий запит до бази даних.
Щоб отримати доступ до мережі, клієнт має пройти автентифікацію. Такий код надсилають портали авторизації в Wi-Fi-мережах готелів, аеропортів і кафе, перш ніж ви ввійдете.
Не є стандартним кодом. Cloudflare повертає його, коли сервер-джерело відмовив у з’єднанні, зазвичай через те, що вебсервер не працює або блокує IP-адреси Cloudflare.
Не є стандартним кодом. Cloudflare повертає його, коли встановив з’єднання із сервером-джерелом, але не отримав HTTP-відповідь до завершення часу очікування (за замовчуванням — 100 секунд).
Не є стандартним кодом. Cloudflare повертає його, коли SSL-сертифікат сервера-джерела недійсний, а режим SSL Full (strict) увімкнено.
Визначено в Cloudflare
Як користуватися
Введіть номер коду (наприклад, 404 або просто 5 для всіх помилок сервера) чи ключове слово, як-от «перенаправлення» або «тайм-аут».
Звузьте список за класом: інформаційні, успішні, перенаправлення, помилки клієнта або помилки сервера.
Скористайтеся кнопкою «Копіювати посилання» біля будь-якого коду, щоб поділитися прямим посиланням на нього, наприклад у звіті про помилку.
Як це працює
Кожна HTTP-відповідь починається з тризначного коду стану. Перша цифра визначає клас: 1xx — інформаційні відповіді, 2xx — успішні, 3xx — перенаправлення, 4xx — помилки запиту, 5xx — помилки на боці сервера. Клієнти, які не розпізнають конкретний код, обробляють його як код x00 відповідного класу, тож невідомий код 4xx обробляється як 400.
Основні коди визначено в RFC 9110 (HTTP Semantics, 2022), який замінив старіший RFC 7231. Інші коди з’явилися в розширеннях: WebDAV (RFC 4918), RFC 6585 для 428, 429, 431 і 511, RFC 7725 для 451 та RFC 8470 для 425. У RFC 9110 також перейменовано два коди: 413 тепер має назву “Content Too Large”, а 422 — “Unprocessable Content”. Ви й досі можете зустріти їхні старі назви — “Payload Too Large” і “Unprocessable Entity”.
Деякі коди, які трапляються в журналах, не є стандартними. nginx внутрішньо використовує 444 і 494–499 (499 означає, що клієнт припинив чекати), а Cloudflare повертає 520–526, коли не може отримати належну відповідь від сервера-джерела. У списку їх позначено як “Non-standard”. Причини відповіді (наприклад, “Not Found”) наведено англійською, як у специфікаціях; HTTP/2 і HTTP/3 передають лише номер.
Приклади
301 чи 308 під час перенесення сайту
Обидва коди означають постійне перенаправлення. Використовуйте 301 для звичайного переміщення сторінок; використовуйте 308, якщо клієнти мають повторити запити POST або PUT за новою URL-адресою, оскільки після 301 деякі клієнти змінюють POST на GET.
401 чи 403
API повертає 401, якщо токен відсутній або прострочений, тож клієнту потрібно ввійти в систему. Код 403 повертається, якщо токен дійсний, але користувач не має потрібних дозволів — повторний вхід не допоможе.
Діагностика помилки 502 за nginx
502 Bad Gateway від nginx означає, що програма за ним не надала належної відповіді. Перевірте, чи запущено процес програми та що записано в журналі; код 504 натомість означає, що відповідь надійшла надто повільно.
Поширені запитання
Чим відрізняються коди 404 і 410?
404 означає, що сервер не може знайти ресурс, і нічого не говорить про те, що буде з ним надалі. 410 означає, що ресурс навмисно видалено й він не з’явиться знову, що допомагає пошуковим системам швидше вилучити URL зі списку.
Для помилки валідації повертати 400 чи 422?
Підходять обидва. Код 400 використовують для запитів, які сервер не може розібрати, наприклад через некоректний JSON. Код 422 — для запитів, які розібрано правильно, але містять неприпустимі значення, як-от адресу електронної пошти без символу @.
418 I'm a teapot — це справжній код стану?
Цей код з’явився в першоквітневій специфікації RFC 1998 року. RFC 9110 резервує код 418, щоб його не призначили для інших цілей. Деякі сервери повертають його жартома, але стандартного значення він не має.
Звідки взявся код 499?
Код 499 використовується лише в nginx. Він з’являється в журналах nginx, коли клієнт закриває з’єднання до того, як сервер надсилає відповідь. Клієнт ніколи не отримує код 499; зазвичай він вказує на повільну відповідь або тайм-аут на боці клієнта.
Пошукові системи сприймають 302 так само, як 301?
Код 302 позначає тимчасове перенаправлення, тому спочатку пошукові системи зазвичай залишають початкову URL-адресу в індексі. Якщо перенаправлення 302 діє довго, Google може сприйняти його як постійне. Для постійного перенаправлення використовуйте 301 або 308.
Конфіденційність
Список є частиною сторінки. Пошук і фільтрування відбуваються у вашому браузері; пошукові запити нікуди не надсилаються й не додаються до аналітики.