Как устроен веб: 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Удалить ресурс

Статус-коды ответа

Сервер отвечает кодом, который говорит о результате. Их полезно знать наизусть:

КодЗначение
200OK — всё хорошо
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, методы и статус-коды, вы готовы осмысленно изучать веб-безопасность дальше. И помните: экспериментировать с запросами можно на своих сайтах и тренировочных площадках, но не на чужих.

Проверьте себя
1. Что означает статус-код 404?
AВсё хорошо
BСтраница не найдена
CОшибка сервера
DДоступ запрещён
2. Какой инструмент позволяет легально изучать веб-запросы своего браузера?
AЧужой сервер
BDevTools (инструменты разработчика, F12)
CАнтивирус
DПоисковая система
Поддержать проект