Перейти до вмісту

Коди стану HTTP

Відповідь HTTP починається з трьохзначного коду й короткої фрази причини. Перша цифра — це весь резюме: 1xx попередній, 2xx успішно, 3xx вказує кудись ще, 4xx звинувачує запит, 5xx звинувачує сервер. Якщо ви пам'ятаєте лише це, ви можете прочитати журнал, який ви ніколи раніше не бачили.

Фрази причин тут — це фрази з RFC, англійською мовою, тому що це те, що передається дротом — сервер відправляє "Not Found", а не переклад його, й фраза, яку ви шукаєте в журналі, повинна відповідати байтам, що були фактично відправлені.

Розрізнення, що викликають справжні неприємності, — це всередину класів, а не між ними: 401 проти 403, 301 проти 308, й 502 проти 503 кожен відповідає іншому питанню про те, що робити далі, й кожен регулярно використовується для іншого.

1xx — інформаційна

3

Попередня: відповідь не фінальна й іншої слідує.

КодФраза причиниЩо це означає
100ContinueЗаголовки отримані, продовжіть відправку тіла.
101Switching ProtocolsПеремикання протоколів — рукостиск WebSocket.
103Early HintsРанні підказки: попередньо завантажте ці ресурси, поки готується справжня відповідь.

2xx — успіх

5

Запит було отримано, зрозумівся й прийнято.

КодФраза причиниЩо це означає
200OKУспіх, з тілом.
201CreatedСтворено.Повинен нести заголовок Location, що вказує на новий ресурс.
202AcceptedПрийнято для обробки, яка ще не сталася.
204No ContentУспіх, і навмисне без тіла.Праве відповідь на DELETE, або збереження без чого повертати.
206Partial ContentЧастковий вміст — відповідь на запит Range. Возобновлювальні завантаження.

3xx — переспрямування

6

Ресурс де-небудь ще, або ваша кеш копія все ще добра.

КодФраза причиниЩо це означає
301Moved PermanentlyПеремістилось постійно. Оновіть свої посилання; кеші можуть це зберігати для завжди.
302FoundЗнайдено — тимчасове переспрямування.Широко реалізоване як перемикання методу на GET, що 307 виправляє.
303See OtherДив. інше: отримайте результат за допомогою GET. Переспрямування після POST форми.
304Not ModifiedНе змінено — ваша кеш копія поточна. Відправлено без тіла.
307Temporary RedirectТимчасове переспрямування, метод й тіло збережені.
308Permanent RedirectПостійне переспрямування, метод й тіло збережені.

4xx — помилка клієнта

14

Запит — це проблема. Повтор його без змін знову не вдасться.

КодФраза причиниЩо це означає
400Bad RequestСервер взагалі не міг розібрати запит.
401UnauthorizedНе автентифіковано — сервер не знає, хто ви.Названо Unauthorized, але це означає неавтентифіковано. Повинен включати WWW-Authenticate.
403ForbiddenАвтентифіковано й все ще не дозволено. Кращі посвідчення не допоможуть.
404Not FoundТакого ресурсу немає, й сервер не скаже, чи коли-небудь він був.
405Method Not AllowedНеправильний метод для цього URL.Повинен перелічити ті, що працюють у заголовку Allow.
406Not AcceptableНічого доступного у форматі, що прийме ваш заголовок Accept.
409ConflictКонфліктує з поточним станом — редагування проти застарілої версії.
410GoneПішов: він існував й був навмисне видалений. Сильніше, ніж 404.
413Content Too LargeТіло більше, ніж сервер приймає.
415Unsupported Media TypeСервер не обробляє цей Content-Type.
418I'm a teapotЯ чайник. Жарт Квітня Дурня 1998 року, постійно зарезервований.
422Unprocessable ContentРозібрано правильно, вміст недійсний — відсутнє поле, поганий значення.
429Too Many RequestsОбмежена швидкість.Шукайте Retry-After перед повтором й експоненціально відступіть.
451Unavailable For Legal ReasonsЗаблоковано з юридичних причин. Число — це нарікання на Fahrenheit 451.

5xx — помилка сервера

6

Запит може бути добре. Це ті, що варто повторити.

КодФраза причиниЩо це означає
500Internal Server ErrorНеоброблена помилка на сервері. Нічого не потрібно виправляти з вашого боку.
501Not ImplementedСервер цей метод цей взагалі не реалізує.
502Bad GatewayПроксі дійшов до поточного сервера й отримав щось невживне назад.
503Service UnavailableНавмисне не обслуговує — перевантажений або на обслуговуванні.Статус, що повинен нести Retry-After.
504Gateway TimeoutПроксі здав очікування поточного сервера.
505HTTP Version Not SupportedВерсія HTTP у запиті не підтримується.

FAQ

Яка різниця між 401 й 403?
401 Unauthorized означає, що запит не був автентифікований — сервер не знає, хто ви, й корректна 401 включає заголовок WWW-Authenticate, що вам говорить, як це доказувати. 403 Forbidden означає, що він знає точно, хто ви й ви все ще можливо не маєте цього. Повтор 403 з кращими посвідченнями для тієї ж самої ідентичності не допоможе.
Чи використовувати 301 або 308 для переспрямування?
308, якщо метод має значення. Історично 301 й 302 були широко реалізовані як "переспрямування й перемикання на GET", що мовчки перетворює POST на GET. 307 й 308 були введені, щоб обіцяти, що метод й тіло зберігаються. Для постійного переміщення сторінки, що ніколи не отримується, 301 залишається найкраще зрозумілим вибором.
Що означає 422, що 400 не означає?
400 Bad Request означає, що сервер взагалі не міг розібрати запит — неправильний JSON, зламаний заголовок. 422 Unprocessable Content означає, що він розібрався добре й вміст все ж неправильний: добре сформований текст із відсутнім обов'язковим полем або датою в минулому. Розділення корисне саме тому, що виправлення клієнта різне в кожному випадку.
Чи 418 справжній код стану?
Це справжній у тому, що він зареєстрований й кожна бібліотека HTTP його знає, й жарт у тому, що він походить із 1998 року квітневого жарту Hyper Text Coffee Pot Control Protocol. Спроби повернути число для практичного використання були відхилені, тож воно постійно зарезервовано для чайників.
Чому 503 відрізняється від 502?
502 Bad Gateway означає, що проксі дійшов до поточного сервера й отримав щось невживне назад. 503 Service Unavailable означає, що сервер сам намисне не обслуговує прямо зараз — перевантажений або на обслуговуванні — й це той, що повинен несли заголовок Retry-After, тому що це той, що очікується відновитися.