Как устроен веб: HTTP, запросы и браузер
Веб — самая частая площадка как для атак, так и для защиты. Понимание HTTP — обязательный фундамент для веб-безопасности.
Каждый раз, открывая сайт, вы запускаете цепочку событий. Понимать её важно, потому что большинство уязвимостей в современном мире — именно веб-уязвимости. Разберём механику без всяких атак.
Клиент и сервер
Веб работает по модели «клиент-сервер». Клиент (ваш браузер) отправляет запрос, а сервер присылает ответ — например, HTML-страницу. Этот диалог идёт по протоколу HTTP (или защищённому HTTPS).
Анатомия HTTP-запроса
Запрос состоит из метода, адреса, заголовков и иногда тела. Упрощённо это выглядит так:
GET /products HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: text/html
Здесь GET — это метод (что мы хотим сделать), /products — путь, а ниже идут заголовки с дополнительной информацией.
Основные методы HTTP
| Метод | Назначение |
| GET | Получить данные (например, страницу) |
| POST | Отправить данные (например, форму) |
| PUT | Обновить ресурс |
| DELETE | Удалить ресурс |
Статус-коды ответа
Сервер отвечает кодом, который говорит о результате. Их полезно знать наизусть:
| Код | Значение |
| 200 | OK — всё хорошо |
| 301 / 302 | Перенаправление |
| 403 | Доступ запрещён |
| 404 | Страница не найдена |
| 500 | Ошибка на сервере |
Инструменты разработчика в браузере
Самый легальный и полезный инструмент изучения веба уже встроен в ваш браузер — это DevTools (открываются клавишей F12). Во вкладке Network видно все запросы и ответы вашего собственного браузера. Это безопасно: вы смотрите на свой собственный трафик, а не вмешиваетесь в чужой.
Учебный Python-пример: разбор статус-кода
Этот скрипт просто классифицирует статус-код по категории — так удобно читать логи. Он ничего не отправляет в сеть.
def describe_status(code):
if 200 <= code < 300:
return "Успех"
elif 300 <= code < 400:
return "Перенаправление"
elif 400 <= code < 500:
return "Ошибка клиента"
elif 500 <= code < 600:
return "Ошибка сервера"
return "Неизвестно"
for code in [200, 301, 404, 500]:
print(code, "->", describe_status(code))
Вывод:
200 -> Успех 301 -> Перенаправление 404 -> Ошибка клиента 500 -> Ошибка сервера
Понимая HTTP, методы и статус-коды, вы готовы осмысленно изучать веб-безопасность дальше. И помните: экспериментировать с запросами можно на своих сайтах и тренировочных площадках, но не на чужих.