Ось готовий урок, згенерований за твоїм майстер-промптом. Це класичний CS50-вайб: енергійно, зрозуміло і з фокусом на те, як це працює насправді.
🎓 Тема: HTTP Status Codes і Обробка Помилок
(або "Як сервер каже вам: 'Це не я, це ти'")
1. 🔥 Вступ: проблема та мотивація
Уявіть, що ви прийшли до ресторану. Ви відкриваєте меню, тицяєте пальцем у страву "Лобстер по-королівськи" і кажете офіціанту: "Хочу це". Офіціант киває і йде на кухню.
Ви чекаєте 20 хвилин. Офіціант повертається, ставить перед вами порожню тарілку і мовчки йде. Що це означає? * Лобстери закінчилися? * Кухар захворів? * Ви забули заплатити за вхід? * Чи, може, ресторан переїхав, а ви сидите в закинутій будівлі?
Без пояснень ви розгублені. Ви не знаєте, що робити далі: чекати, кричати чи йти в інше місце.
В інтернеті — те саме. Ваш браузер (клієнт) постійно щось просить у сервера. Якби сервер просто мовчав або надсилав порожню сторінку при помилці, програми б не працювали.
HTTP статус-коди — це і є той самий офіціант, який повертається і каже коротку фразу: "Успіх", "Не знайдено" або "Я зламався". Без цього діалогу інтернет був би хаосом.
2. 🧠 Теоретична база (без сухої академічності)
Коли ви надсилаєте запит (Request), сервер завжди повертає тризначне число. Це і є Status Code.
Давайте заглянемо "під капот". Це число прилітає в заголовку (Header) відповіді раніше, ніж картинки чи текст сайту. Браузер бачить число і миттєво розуміє: малювати сайт чи показувати помилку.
Вам не треба зубрити всі коди (їх більше 60!), але треба зрозуміти логіку першої цифри. Це як поверхи в будівлі:
🟢 2xx — Успіх ("Все добре, ось твоє замовлення")
- 200 OK: Класика. Ви просили — ми дали.
- 201 Created: Ви щось створили (наприклад, зареєструвалися), і сервер каже: "Записав, готово".
🟡 3xx — Перенаправлення ("Тобі не сюди, йди в інше вікно")
- 301 Moved Permanently: Сайт переїхав назавжди. Google запам'ятає нову адресу.
- 302 Found (Temporary Redirect): Ми поки тут ремонт робимо, тимчасово йди туди.
🟠 4xx — Помилка Клієнта ("Ти помилився")
Це найважливіша частина для нас. Це означає: сервер працює, але ти (браузер/користувач) просиш дурницю.
- 400 Bad Request: Сервер каже: "Я не розумію, що ти написав". (Кривий синтаксис).
- 401 Unauthorized: "Хто ти такий?". Потрібен логін і пароль.
- 403 Forbidden: "Я знаю, хто ти, але тобі сюди не можна". (Наприклад, звичайний юзер лізе в адмінку).
- 404 Not Found: Класика. "Такої сторінки не існує".
🔴 5xx — Помилка Сервера ("Я помилився")
Це означає: ти все зробив правильно, але сервер "впав".
- 500 Internal Server Error: Загальна помилка. На сервері в коді стався вибух (exception).
- 503 Service Unavailable: Сервер перевантажений або на техобслуговуванні. "Передзвоніть пізніше".
Інтуїтивно: * 2xx — 👍 (Круто) * 4xx — 🫵 (Ти винен) * 5xx — 🤕 (Я [сервер] хворію)
3. 🧪 Приклади (від простого до реального)
Приклад 1: Звичайний серфінг
Ви вводите google.com.
Питання до вас: Який код поверне сервер Google, коли покаже рядок пошуку?
(Подумайте секунду...)
Відповідь: 200 OK. Все штатно.
Приклад 2: "Розумний" логін
Уявіть, ви пишете код для входу на сайт. Користувач вводить правильний логін, але неправильний пароль.
Питання: Що має відповісти сервер?
а) 200 OK (і написати текстом "Пароль невірний")
б) 404 Not Found
в) 401 Unauthorized
Правильна відповідь: 401 Unauthorized.
Чому не 200? Бо 200 означає "операція успішна". А вхід не відбувся. Якщо ви повернете 200, браузер може запропонувати зберегти цей "невірний" пароль. Логіка ламається.
Приклад 3: Реальний кейс (API)
Уявіть, що ви — Frontend-розробник. Ви відправляєте дані на сервер, щоб створити нове замовлення, але забули вказати адресу доставки.
Сервер (Backend) перевіряє дані, бачить, що адреси немає.
Він повертає:
* Status: 400 Bad Request
* Body: {"error": "Address is required"}
Чому це круто? Ваша програма бачить код 400 і одразу підсвічує поле адреси червоним. Їй навіть не треба читати текст помилки, щоб зрозуміти, що щось не так із даними.
4. 🛠 Практична частина
Спробуйте вирішити ці ситуації. Як би ви налаштували відповідь сервера?
Завдання 1: Знайди шпигуна
Користувач намагається видалити коментар іншого користувача. Він залогінений, але у нього немає прав адміністратора.
* Який код повернути: 401 чи 403? Чому?
Завдання 2: Привид
Ви звертаєтесь до бази даних за товаром id=9999, але такого товару немає.
* Що повернути: 200 (з порожнім тілом), 400 чи 404?
Завдання 3: Апокаліпсис
Ваш код на Python поділив на нуль, і все впало.
* Який код автоматично полетить клієнту? (500 чи 503?)
Завдання 4: Міні-кейс
Ви робите форму реєстрації. Користувач натиснув "Зареєструватися", все пройшло добре.
* Чи достатньо повернути 200 OK? Чи є більш точний код для створення ресурсу?
5. 💡 Мислення як у розробника
Ось де новачки "паляться", а профі — ні.
❌ Типова помилка новачка: "Синдром 200"
Новачки часто роблять так: сервер завжди повертає 200 OK, навіть якщо сталася помилка. А про помилку пишуть у JSON:
HTTP/1.1 200 OK
{
"status": "error",
"message": "Database crashed"
}
Чому це жахливо? Тому що системи моніторингу та браузери дивляться на заголовки. Вони думають: "О, 200! Все працює чудово!", хоча насправді у вас все горить. Ви не дізнаєтесь про проблему, поки користувачі не почнуть дзвонити в підтримку.
✅ Як думає профі:
- Розділяй відповідальність. Якщо клієнт надіслав криві дані — це його проблема (4xx). Не засмічуй свої логи помилками сервера (5xx) через те, що хтось забув ввести email.
- Безпека через неоднозначність. Іноді, коли вводять неправильний логін, краще повернути
401, але написати "Невірний логін або пароль". Не підказуйте хакерам, що саме вони вгадали (логін), а що ні (пароль).
6. 🧩 Підсумок
Отже, що ми маємо сьогодні в сухому залишку:
- HTTP-коди — це мова емоцій сервера.
- 2xx — все добре.
- 4xx — помилка клієнта (виправляй запит).
- 5xx — помилка сервера (виправляй бекенд).
- Ніколи не брешіть кодом
200, якщо щось пішло не так.
Тепер ви вмієте не просто "надсилати дані", а вести діалог із системою.
🚀 Що далі? Гаразд, ми навчилися стукати у двері і розуміти, чи нам раді. Але як передати через ці двері складну посилку, а не просто текст? На наступному уроці розберемо JSON та структуру API-запитів. Це буде цікаво!
(Завіса. David Malan вимикає клікер і йде зі сцени під оплески)