При зверненні до веб-сервера або додатку кожен HTTP-запит, що надійшов, отримує як відповідь код стану HTTP (англ. HTTP status code). Коди стану HTTP – це тризначні коди, згруповані у п'ять різних класів. Клас коду стану можна визначити за першою цифрою:
- 1хх – інформаційні коди;
- 2хх – успіх;
- 3хх – перенапрямок;
- 4хх – помилка клієнта;
- 5хх – помилка сервера.
Цей посібник фокусується на виявленні та усуненні найпоширеніших кодів помилок HTTP (тобто кодів стану 4xx і 5xx) з точки зору системного адміністратора. У деяких ситуаціях веб-сервер відповідає запитом певним кодом помилки; розглянемо загальні можливі причини та рішення.
Короткий огляд помилок клієнта та сервера
Помилки клієнта (коди стану HTTP 400-499) виникають через HTTP-запити, надіслані клієнтом (веб-браузером або іншим клієнтом HTTP). Хоча ці типи помилок пов'язані безпосередньо з клієнтом, системному адміністратору корисно знати, з якими помилками може зіткнутися користувач, щоб визначити, чи можна вирішити цю проблему в конфігураціях сервера.
Помилки сервера (коди стану HTTP 500-599) виникають тоді, коли веб-сервер не в змозі обробити запит через будь-яку помилку або збій.
Загальні поради щодо усунення помилок HTTP
- Під час використання веб-браузера для тестування веб-сервера не забудьте оновити браузер після внесення змін до установок сервера.
- Перевірте серверні логі, щоб отримати докладні відомості про те, як сервер обробляє запити. Наприклад, веб-сервери Apache та Nginx створюють два файли на ім'я access.log та error.log, у яких можна знайти відповідну інформацію.
- Запам'ятайте: визначення кодів стану HTTP є частиною стандарту, який реалізується програмою, що обслуговує запити. Це означає, що фактичний код стану, який повертається в результаті залежить від того, як програмне забезпечення сервера обробляє конкретну помилку.
Ознайомившись з основними поняттями кодів стану HTTP, приступимо до огляду найпоширеніших помилок.
Помилка 400 Bad Request
Код статусу 400, або помилка Bad Request («неправильний запит») означає, що синтаксис запиту HTTP, надісланого на сервер, неправильний.
Як правило, причини виникнення помилки 400 Bad Request такі:
- Куки користувача, пов'язані з сайтом, пошкоджено. Щоб вирішити цю проблему, спробуйте очистити кеш браузера та файли cookie.
- Спотворений запит через несправний браузер.
- Спотворений запит через помилку користувача при формуванні HTTP-запиту вручну (наприклад, неправильне використання curl).
Помилка 401 Unauthorized
Код статусу 401 або помилка Unauthorized («неавторизований») означає, що користувач, який намагається отримати доступ до ресурсу, не пройшов авторизацію (або не зміг пройти її, вказавши невірні облікові дані). Щоб мати можливість переглядати захищений ресурс, користувач має надати коректні облікові дані.
Наприклад, помилка 401 Unauthorized може виникнути, якщо користувач намагається отримати доступ до ресурсу, який захищений HTTP-авторизацією (як у цьому посібнику Nginx). У подібній ситуації помилка 401 буде з'являтися знову і знову, поки користувач не надасть коректний логін і пароль (який внесений у файл .htpasswd).
Помилка 403 Forbidden
Код стану 403, або помилка Forbidden («заборонено») означає, що запит користувача було надіслано правильно, але сервер відмовляється обслуговувати його у зв'язку з відсутністю дозволу доступу до запитуваного ресурсу. У цьому розділі описано найпоширеніші причини виникнення помилки 403.
Права на файл
Як правило, помилка 403 трапляється, якщо користувач, який запускає процес веб-сервера, не має прав на читання файлу, що запитується.
Щоб навести приклад усунення помилки 403, припустимо, що:
- Користувач намагається отримати доступ до індексного файлу (http://example.com/index.html);
- робочий процес веб-сервера належить користувачеві www-data;
- індексний файл на сервері знаходиться у /usr/share/nginx/html/index.html.
Отже, якщо користувач отримує помилку 403 Forbidden, переконайтеся, що користувач www-data має право читати файл. Як правило, у цій ситуації потрібно просто змінити права на файл. Це можна зробити кількома способами, але в цьому випадку підійде ось ця команда:
sudo chmod o=r /usr/share/nginx/html/index.html
Файл .htaccess
Ще одна потенційна причина виникнення помилки 403 (часто це робиться навмисно) – використання .htaccess файлу. За допомогою файлу .htaccess можна заборонити конкретним IP-адресам (або діапазонам адрес) доступ до певних ресурсів.
Якщо користувачі несподівано зазнають помилки 403 Forbidden, переконайтеся, що вона не була викликана налаштуваннями файлу .htaccess.
Неіснуючий індексний файл
Якщо користувач намагається отримати доступ до каталогу, який не має стандартного індексного файлу, а листинг каталогу (directory listing) вимкнено, веб-сервер повертатиме помилку 403 Forbidden.Таке трапиться, якщо, наприклад, користувач спробує отримати доступ до каталогу http://example.com/emptydir/, а каталог emptydir на сервері не має індексного файлу. Лістинг каталогу можна увімкнути у конфігураціях сервера.
Помилка 404 Not Found
Код статусу 404, або помилка Not Found («не знайдено») означає, що користувач може взаємодіяти з сервером, але файл або ресурс відсутній.
Помилки 404 можуть виникнути в різних ситуаціях. Нижче наведено список порад, які допоможуть усунути проблему у випадку, якщо користувач несподівано отримав 404 Not Found:
- Перевірте посилання, яке надсилає користувача на сервер, на наявність помилок або помилок.
- Можливо, користувач ввів неправильну URL-адресу.
- Можливо, потрібного файлу немає у зазначеному місці на сервері; переконайтеся, що запитуваний ресурс не було переміщено або видалено з сервера.
- Перевірте, чи правильно вказано розташування кореневого каталогу (document root) в конфігурації сервера.
- Можливо, користувач, якому належить робочий процес веб-сервера, не має відповідних прав, щоб відкрити каталог, в якому знаходиться файл, що запитується. Для доступу до каталогу потрібні права на читання та виконання.
- Якщо користувач переходить до ресурсу за символічним посиланням, переконайтеся, що веб-сервер налаштований для підтримки символічних посилань.
Помилка 500 Internal Server Error
Код стану 500, або помилка Internal Server Error (внутрішня помилка сервера) означає, що сервер не може обробити запит з невідомої причини. Іноді цей код з'являється в ситуаціях, коли більш відповідними є інші повідомлення про помилки 5xx.
Як правило, причиною цієї помилки є неправильне настроювання сервера (наприклад, спотворений файл .htaccess) або брак деяких пакетів (наприклад, запуск файлу PHP без попередньо встановленого PHP).
Помилка 502 Bad Gateway
Код стану 502, або помилка Bad Gateway («помилковий шлюз») означає, що сервер, що запитується, є шлюзом або проксі-сервером, і він не отримує валідних відповідей від серверів бекенда, які насправді виконали запит.
Якщо йдеться про зворотний проксі-сервер (наприклад, про балансувальник навантаження), переконайтеся, що:
- з серверами бекенда (на які пересилаються HTTP-запити) все гаразд;
- зворотний проксі налаштований правильно, у його налаштуваннях вказані коректні бекенди;
- мережне з'єднання між серверами бекенда та зворотним проксі-сервером у порядку. Якщо сервери можуть взаємодіяти на інших портах, переконайтеся, що порти не заблоковані брандмауером;
- потрібні сокети існують у коректному місцезнаходженні та мають відповідні дозволи (якщо веб-додаток налаштований слухати сокети).
Помилка 503 Service Unavailable
Код стану 503 або помилка Service Unavailable («сервіс недоступний») означає, що сервер перевантажений або знаходиться на обслуговуванні; такий сервіс має стати доступним протягом певного часу.
Якщо сервер не знаходиться на обслуговуванні, ця помилка може вказувати на те, що серверу не вистачає ресурсів процесора або пам'яті для обробки всіх запитів, що входять, або що потрібно налаштувати веб-сервер для обслуговування більшої кількості користувачів або процесів.
Помилка 504 Gateway Timeout
Код стану 504 або помилка Gateway Timeout («шлюз не відповідає») означає, що даний сервер є шлюзом або проксі-сервером, і він не отримує відповіді від бекенда в межах допустимого періоду часу.
Як правило, це відбувається з таких причин:
- Погане мережне з'єднання між серверами;
- Внутрішній сервер, який виконує запит, працює надто повільно;
- У налаштуваннях сервера встановлено занадто короткий час очікування шлюзу або проксі-сервера.
Висновок
Тепер ви знайомі з основними кодами помилок HTTP і знаєте деякі шляхи вирішення цих проблем.
Якщо ви зіткнулися з помилкою, яка не була охоплена цією статтею, або знаєте інші зручні способи усунення помилок HTTP, будь ласка, опишіть їх у коментарях нижче.
Сторінки помилок регулярно зустрічаються як веб-майстрам, так і звичайним інтернет-користувачам. Вони можуть сигналізувати про проблеми на сайті, інформувати про перенаправлення або підтверджувати успішне виконання дії. Характер повідомлення визначається конкретним кодом. Сьогодні ми розповімо про найпоширеніші типи помилок http і що потрібно для того, щоб дізнатися про код відповіді сервера.
Коди стану HTTP – що це
Перш ніж пояснювати, що означає код помилки, зупинимося на тому, що є HTTP status code, тобто код стану. Простими словами це числовий код, який сервер відправляє браузеру у відповідь на запит, повідомляючи, як він пройшов: успішно, з помилкою або вимагає додаткових дій.
Уявіть, що ви замовляєте піцу телефоном:
- 200 OK: «Ваше замовлення прийняте, чекайте на доставку» (успіх).
- 404 Not Found: «Вибачте, такої піци немає в меню» (помилка).
- 301 Moved Permanently: "Ми переїхали, тепер замовлення за іншим номером" (перенаправлення).
- 500 Internal Server Error: "У нас зламалася піч, замовлення тимчасово не приймаємо" (помилка сервера).
Тобто завдяки HTTP status code ви можете швидко зрозуміти, що сталося із запитом, не вдаючись до подробиць.
Як дізнатися коди відповіді сервера через браузер
Переглянути відповідь сервера може знадобитися для перевірки коректності налаштувань перенаправлень. Або для виявлення проблем із завантаженням певних елементів сторінки, коли основний вміст завантажується, але деякі функції недоступні.
Отже, як дізнатись код відповіді сторінки? Для цього виконайте такі кроки:
- Відкрийте сторінку, де виникає проблема.
- Викличте інструменти розробника у браузері. Для цього використовуйте клавіші Ctrl + Shift + I (для Windows/Linux) або Cmd ⌘ + Opt ⌥ + I (для macOS).
- Перейдіть на вкладку "Мережа".
- Оновіть сторінку.
Після цього ви побачите список усіх HTTP-запитів та відповідних http codes сервера.
Класифікація кодів стану HTTP
Існує 5 основних типів кодів, кожен з яких виконує певну функцію в системі комунікації між клієнтом та сервером:
- 1xx – інформаційний статус коди. Вони повідомляють про те, що запит прийнято та обробка триває. Наприклад, код 100 Continue говорить клієнту, що можна продовжувати надсилання запиту.
- 2xx – коди успішного виконання. Вказують на те, що запит клієнта успішно прийнято та опрацьовано. Найпоширеніша відповідь сервера – 200 OK, що означає успішне виконання запиту.
- 3xx – коди перенаправлення. Інформують клієнта про необхідність виконання додаткових дій для завершення запиту. Часто використовуються при зміні URL ресурсу, наприклад 301 Moved Permanently.
- 4xx – коди помилок клієнта. Сигналізують про проблеми з боку клієнта, наприклад відсутність прав доступу або запит неіснуючого ресурсу. Типовий приклад – 404 Not Found.
- 5xx – коди помилок http сервера. Вони вказують на проблеми, що виникли на сервері під час обробки запиту. Наприклад, 500 Internal Server Error повідомляє, що виникла непередбачена помилка сервера.
Докладніше про різні коди відповіді сервера ми розповімо далі.
Вплив HTTP кодів на СЕО
HTTP коди стану можуть суттєво впливати на позиції сайту у пошуковій видачі. Google використовує коди відповідей http для оцінки якості та доступності веб-ресурсів, що безпосередньо відбивається на їх ранжуванні.
Коди 2xx, особливо 200 OK, показують, що сторінка успішно завантажується та доступна для індексації. Завдяки цьому пошукові роботи можуть безперешкодно сканувати та індексувати контент. Але на позиціях сторінки http коди 2хх ніяк не відбиваються.
А ось коди 3xx, пов'язані з перенапрямками, надають більший вплив на позиції. Правильне використання 301 редагування (постійне перенаправлення) допомагає зберегти «вагу» сторінки при зміні URL, передаючи авторитет старої сторінки нової. Це особливо важливо при реструктуризації сайту або зміні доменного імені. Але треба враховувати, що надмірні чи неправильно налаштовані редиректи можуть негативно впливати на швидкість завантаження та індексацію сайту, і в результаті – на позиції у пошуковій видачі.
Серйозно нашкодити СЕО просування можуть коди помилок 4xx і 5xx, особливо якщо зустрічаються часто. Наприклад, велика кількість сторінок з кодом 404 (Not Found) може вказувати на проблеми з внутрішньою структурою сайту і негативно позначитися на досвіді користувача.Аналогічно часті помилки 500 (Internal Server Error) можуть свідчити про нестабільність сервера, що негативно впливає на ранжування.
Важливо, що тимчасові http помилки (наприклад, короткострокові 503 Service Unavailable) зазвичай не призводять до просідання позицій, якщо швидко усуваються. Однак проблеми, що повторюються, можуть негативно вплинути на СЕО.
Тому для ефективного просування ми радимо регулярно моніторити http статус коди, оперативно виправляти помилки та правильно налаштовувати редиректи. Для перевірки статусу індексації сторінки можна скористатися Google Search Console. Процедура перевірки виглядає так:
- Зайдіть до Google Search Console.
- У пошуковому рядку введіть URL сторінки, яка вас цікавить.
- Натисніть клавішу Enter для запуску перевірки.
Після цього сервіс надасть інформацію про поточний статус сторінки. Якщо виявиться, що вона більше не індексується, ви можете почати повторну індексацію, натиснувши на опцію «Запросити індексування».
Google Search Console також пропонує інструменти для виявлення помилок на сайті. Цю інформацію ви знайдете у розділі «Покриття», доступному за допомогою лівого меню на головній сторінці панелі.
Опис кодів стану HTTP
Існує понад 40 офіційно затверджених кодів стану HTTP та ще стільки ж неофіційних. Ми розповімо про ті, що зустрічаються найчастіше.
1хх Informational
Це інформаційні відповіді сервера http, які призначені передачі проміжної інформації у процесі обробки запиту. Вони повідомляють клієнту про те, що його запит отримано та обробляється сервером, але остаточна відповідь ще не готова. Розглянемо найпоширеніші їх.
100 Continue інформує клієнта про те, що сервер отримав початкову частину запиту та готовий прийняти його повністю. Це корисно при надсиланні великих обсягів даних: клієнт може переконатися, що сервер готовий приймати запит, перш ніж надсилати всю інформацію.
101 Switching Protocols — код стану http перекладається як «Переключити протокол». Він використовується, коли клієнт вимагає зміни протоколу зв'язку. Наприклад, при переході з HTTP на WebSocket для встановлення постійного з'єднання.
103 Early Hints перекладається як "Попередні дані". Він дозволяє серверу відправити частину заголовків відповіді до повної відповіді. Це може прискорити завантаження ресурсів, дозволяючи браузеру розпочати попереднє завантаження або обробку даних.
2xx Success
Це успішні статуси відповіді сервера, які вказують на те, що запит клієнта було прийнято та оброблено. Вони підтверджують, що операція виконана без помилок, і користувач може продовжувати свою роботу.
200 OK – найпоширеніший успішний код стану, що означає, що запит виконано та сервер відправляє запитані дані.
201 Created означає, що запит був успішним і створено на сервері новий ресурс. Цей код зазвичай повертається після виконання запитів, таких як POST або PUT, коли сервер додає щось нове, наприклад файл або запис. У відповіді також зазначається, де знаходиться створений ресурс.
202 Accepted повідомляє, що запит прийнято в обробку, але ще не завершено. Це корисно для асинхронних операцій, коли результат може бути отриманий негайно.
203 Non-Authoritative Information інформує про успішність виконання запиту, але дані у відповіді можуть бути змінені.Це відбувається, коли проміжний сервер, наприклад, проксі, змінює або кешує дані перед їх надсиланням користувачеві. Тому інформація може трохи відрізнятись від оригіналу.
204 No Content використовується, коли сервер успішно обробив запит, але немає даних для надсилання у відповіді. Часто застосовується в API для підтвердження успішних операцій без повернення даних.
205 Reset Content інструктує клієнта скинути дані на сторінці. Тобто, потрібно оновити форму або налаштування на ній, щоб повернути їх у вихідний стан.
206 Partial Content застосовується при частковій передачі вмісту, наприклад, при відновленні перерваних завантажень або потоковій передачі медіа.
207 Multi-Status використовується, коли один запит стосується кількох елементів, і для кожного з них може бути свій результат успішний або з помилками.
3xx Redirection
Це коди перенаправлень. Вони використовуються для інформування про те, що ресурс, що запитується, доступний за іншою адресою або вимагає додаткових дій. Ці коди доступу допомагають оптимізувати навігацію по сайту та забезпечувати правильну обробку запитів при зміні розташування ресурсів.
300 Multiple Choices пропонує клієнту вибрати один із кількох варіантів. Наприклад, якщо умови запиту відповідають відразу кілька типів файлів на сервері.
HTTP 301 Moved Permanently особливо важливий для SEO та оновлення посилань, оскільки вказує на переміщення ресурсу. Тобто сайт тепер доступний за іншою адресою.
302 Found (раніше Moved Temporarily) повідомляє про тимчасове переміщення ресурсу. І вимагає при наступних запитах вводити стару URL-адресу.
HTTP 303 See Other направляє клієнта до іншого URL з використанням методу запиту GET.
304 Not Modified дозволяє використовувати кешовану версію ресурсу, заощаджуючи трафік.
HTTP 307 Temporary Redirect аналогічний до 302, але вимагає збереження вихідного методу запиту.
308 Permanent Redirect схожий на 301, але також потребує збереження методу запиту.
305 Use Proxy та 306 Switch Proxy більше не використовуються через проблеми з безпекою.
4xx Client Error
Це коди помилок клієнта, які використовуються для вказівки на проблеми, що виникли через дії клієнта або помилки у запиті. Ці статуси відповіді сервера допомагають швидко ідентифікувати та виправити проблеми на стороні клієнта. Найбільш поширені такі коди:
400 Bad Request вказує на некоректність запиту часто через синтаксичні помилки.
401 Unauthorized сигналізує про необхідність авторизації або автентифікації. Тобто користувачеві необхідно надати правильні облікові дані для доступу до ресурсу.
Помилка HTTP 403 Forbidden означає, що сервер розпізнав запит, але відмовляє у його виконанні, оскільки клієнт не має достатніх прав доступу.
404 Not Found — найвідоміша відповідь сторінки, яка вказує на відсутність запитуваного ресурсу на сервері. Він допомагає користувачам та пошуковим системам зрозуміти, що сторінка чи ресурс не існує.
HTTP 405 Method Not Allowed інформує про те, що сервер отримав запит, але метод, який був використаний (наприклад, GET, POST тощо), не дозволений для цього ресурсу. Тобто, ви звернулися до правильної сторінки, але з неправильним способом запиту.
406 Not Acceptable виникає, коли сервер не може повернути дані у форматі, який відповідає вашому запиту. Тобто сервер знайшов ресурс, але не може повернути його у вигляді, який ви запросили.
HTTP 408 Request Timeout вказує на перевищення часу очікування запиту. Простіше кажучи, він зайняв дуже багато часу, і сервер «здався».
409 Conflict сигналізує про конфлікт під час виконання запиту, наприклад, одночасної зміни ресурсу кількома клієнтами. Це необхідно для запобігання втраті даних та забезпечення цілісності інформації.
413 Payload Too Large виникає, коли розмір запиту перевищує допустимі ліміти сервера. Це допомагає запобігти перевантаженню сервера та захистити від потенційних атак.
414 URI Too Long означає, що адреса (URL), яку ви надіслали у запиті, надто довга, і сервер не може її обробити.
415 Unsupported Media Type виникає, коли формат даних у запиті не підтримується сервером.
5xx Server Error
Ці коди вказують на проблеми на стороні сервера під час обробки запиту. Веб-майстрам вони допомагають діагностувати та усувати існуючі проблеми. А клієнтів інформують про неможливість виконати запит з причин, які не пов'язані з його діями.
500 Internal Server Error — загальна помилка сервера, яка потребує діагностики.
501 Not Implemented означає, що сервер не підтримує запитаний функціонал.
502 Bad Gateway виникає у разі проблеми взаємодії між серверами.
Код відповіді сервера HTTP 503 Service Unavailable вказує, що він тимчасово недоступний.
HTTP 504 Gateway Timeout сигналізує про перевищення часу очікування відповіді вищого сервера.
505 HTTP Version Not Supported виникає у разі несумісності версій HTTP.
HTTP 507 Insufficient Storage вказує на брак місця на сервері.
508 Loop Detected запобігає нескінченним циклам перенаправлень.
HTTP 509 Bandwidth Limit Exceeded (нестандартний код) повідомляє про перевищення ліміту трафіку на хостингу.
Підіб'ємо підсумки
Коди стану HTTP відіграють ключову роль у сучасній веб-розробці та обслуговуванні сайтів. Їхнє правильне застосування істотно впливає на різні аспекти функціонування веб-ресурсів. По-перше, вони є первинним індикатором при діагностиці проблем, дозволяючи швидко локалізувати і усунути неполадки. Це особливо важливо у складних системах, де швидке виявлення джерела помилки може заощадити години роботи та запобігти потенційним збиткам.
По-друге, через створення зрозумілих повідомлень про помилки можна поліпшити досвід користувача, так як клієнти зможуть швидко зрозуміти, що пішло не так. По-третє, правильне застосування кодів стану HTTP — це важливий аспект безпеки. Деякі коди, такі як 401 або 403, допомагають захистити ресурси від несанкціонованого доступу. Правильна реалізація цих кодів може значно посилити захист веб-програм від потенційних загроз.