HTTP — це правила спілкування між браузером і сервером. Ти натискаєш посилання або кнопку “Зберегти”, браузер формує запит, сервер його обробляє і повертає відповідь. У Laravel майже вся магія “чому не працює” пояснюється саме тут: який був запит, які перевірки пройшов, і що сервер повернув у відповідь.
Почнемо з головного ланцюжка. Request — це те, що ти відправляєш на сервер: адреса (URL), метод (GET/POST/PUT/DELETE), заголовки і дані форми. Response — це те, що сервер повертає назад: статус (код), заголовки і тіло відповіді (HTML-сторінка, JSON або редирект). Коли ти розумієш різницю, ти перестаєш “тикати навмання” і починаєш бачити, на якому етапі все ламається.
GET і POST — дві базові дії, з яких починається веб. GET — отримати сторінку або список, він не повинен змінювати дані. POST — відправити дані на створення або дію (наприклад, збереження форми). У Laravel оновлення часто йде через PUT або PATCH, а видалення — через DELETE. Якщо ти переплутаєш метод, отримаєш 404 або “Method not allowed”, навіть якщо маршрут ніби існує.
Тепер про статуси, бо вони говорять правду швидше за будь-які здогадки. 200 означає, що відповідь успішна і сторінка/дані віддались. 302 — редирект, часто після успішного збереження або коли гість іде на сторінку, де треба логін. 404 означає “не знайдено”: або маршруту немає, або ти просиш файл/сторінку, якої не існує. 403 означає “заборонено”: маршрут є, але доступу немає. 419 у Laravel найчастіше означає проблему з CSRF або сесією. 422 — помилка валідації: форма відправилась, але дані не пройшли правила. 500 — внутрішня помилка сервера: йди в логи, там буде причина.
Middleware — це охорона на вході, яка стоїть перед твоїм контролером. Уяви, що кожен запит проходить через коридор перевірок: чи залогінений користувач, чи має потрібні права, чи є CSRF-токен, чи не бот, чи правильна мова/локаль. Middleware може пропустити запит далі або зупинити його і повернути 403/419/редирект. Для новачка це ключ: якщо щось “не доходить” до контролера — дивись middleware.
CSRF — це захист від підроблених запитів з іншого сайту. Простий сценарій атаки: ти залогінений у адмінці, відкриваєш сторонній сайт, а він непомітно відправляє форму на твій сайт від твого імені. Laravel це блокує через CSRF-токен: у кожній формі має бути спеціальне поле з токеном. Якщо токена немає або сесія не співпадає, ти отримуєш 419. Для Blade-форм це вирішується тим, що ти завжди вставляєш @csrf у форму.
Session — це пам’ять між запитами. HTTP сам по собі “без пам’яті”: кожен запит окремий. Сесія дозволяє серверу “пам’ятати”, що ти залогінений, що в тебе є flash-повідомлення, які налаштування або токени. Сесія тримається зазвичай через cookie в браузері. Якщо сесія ламається, ти можеш раптово вилітати з акаунта або отримувати 419, бо CSRF прив’язаний до сесії.
Як це виглядає в реальному житті, коли ти тестуєш форму “створити новину”. Ти відкриваєш сторінку — це GET-запит, сервер повертає HTML (200). Ти натискаєш “Зберегти” — це POST-запит, в тілі йдуть поля форми, CSRF-токен, і cookie сесії. Запит проходить middleware: auth, permission, csrf. Якщо все добре — контролер викликає сервіс, запис іде в базу, сервер повертає 302 редирект назад на список і додає flash “Збережено”. Якщо валідація не пройшла — повернеться 422 або редирект з помилками, і ти побачиш errors біля полів. Якщо немає токена — 419. Якщо немає прав — 403.
Як швидко діагностувати проблеми, не гадаючи. Дивись на статус у браузері (DevTools → Network): він підкаже напрям. 404 — перевір маршрути і метод. 403 — перевір middleware доступів і policies. 419 — перевір @csrf, cookie, домен, чи не злетіла сесія. 422 — дивись помилки валідації і messages. 500 — відкривай storage/logs і читай перший реальний рядок помилки, а не “все підряд”.
Висновок: HTTP — це скелет вебпрограмування. Request/response пояснюють, що саме відправляється і що повертається. Middleware показує, де запит може бути зупинений до контролера. CSRF і session — причина більшості “дивних” проблем з формами. А статуси — найшвидший спосіб зрозуміти, що пішло не так і куди дивитися далі.