HTTP и веб-протоколы
Протокол HTTP, методы, коды состояния, кэширование и REST.
14 вопросов
JuniorТеорияОчень частоКакие основные методы HTTP и чем GET отличается от POST для формы?
Какие основные методы HTTP и чем GET отличается от POST для формы?
Основные методы: GET читает, POST создаёт, PUT/PATCH обновляют, DELETE удаляет, HEAD берёт заголовки. Форма GET кладёт поля в query string URL (кэш, лог); POST шлёт их в теле — для чувствительных данных.
Типичные ошибки
- ✗Думать, что
GETкладёт данные формы в тело, а не в query string URL - ✗Слать пароли или большие загрузки через
GET, где они логируются и кэшируются - ✗Считать, что есть только
GETиPOST, игнорируяPUT/PATCH/DELETE/HEAD
Уточняющие вопросы
- →Почему
GETсчитается безопасным и идемпотентным, аPOST— нет? - →Когда выбрать
PUTвместоPATCHдля обновления ресурса?
JuniorТеорияОчень частоЧто означают классы кодов состояния HTTP от 1xx до 5xx?
Что означают классы кодов состояния HTTP от 1xx до 5xx?
Первая цифра группирует семантику: 1xx информационные, 2xx успех (200), 3xx перенаправление (301/302), 4xx ошибка клиента, 5xx ошибка сервера. Клиент читает ведущую цифру, чтобы решить, как реагировать.
Типичные ошибки
- ✗Путать
4xxи5xx— считать4xxошибкой сервера, а5xxошибкой клиента - ✗Принимать перенаправления
3xxза обычный успех как2xx - ✗Зубрить отдельные коды, не понимая, что первая цифра задаёт класс
Уточняющие вопросы
- →В чём разница между
401и403внутри класса4xx? - →Почему провал валидации должен возвращать
4xx, а не5xx?
JuniorТеорияЧастоЧто такое HTTP и как устроено сообщение запроса и ответа?
Что такое HTTP и как устроено сообщение запроса и ответа?
HTTP — это текстовый протокол прикладного уровня без состояния поверх TCP/IP для запроса и ответа между клиентом и сервером. Оба сообщения имеют стартовую строку, заголовки key:value, пустую строку и необязательное тело.
Типичные ошибки
- ✗Называть
HTTPпротоколом транспортного уровня или бинарным вместо текстового прикладного - ✗Считать
HTTPпротоколом с состоянием, держащим сессию без cookies или токенов - ✗Забывать про пустую строку, отделяющую заголовки от тела
Уточняющие вопросы
- →Как
HTTPсохраняет состояние между запросами, если сам протокол без состояния? - →Что меняет поле версии в стартовой строке (
HTTP/1.1противHTTP/2)?
JuniorТеорияЧастоВ чём разница между HTTP и HTTPS?
В чём разница между HTTP и HTTPS?
HTTPS — это HTTP поверх шифрованного соединения TLS (ранее SSL), поэтому трафик шифруется, защищён по целостности, а сервер аутентифицируется сертификатом. Обычный HTTP шлёт всё открытым текстом, который читает любой на маршруте.
Типичные ошибки
- ✗Думать, что
HTTPSскрывает только URL, оставляя заголовки и тело открытыми - ✗Считать, что обычный
HTTPсам шифрует данные безTLS - ✗Принимать
HTTPSза отдельный протокол, а не заHTTPповерхTLS
Уточняющие вопросы
- →Что подтверждает сертификат
TLSпомимо включения шифрования? - →Почему заголовок
Hostвсё ещё виден наблюдателю сети подHTTPS?
MiddleТеорияЧастоКак перенаправить браузер на другую страницу средствами HTTP?
Как перенаправить браузер на другую страницу средствами HTTP?
Верните статус 3xx с заголовком Location, указывающим целевой URL — 301 постоянный (браузеры и SEO кэшируют) или 302 временный. Браузер делает новый запрос к этому URL; для старых клиентов добавьте ссылку HTML.
Типичные ошибки
- ✗Слать
200с заголовкомLocationвместо статуса3xxдля перенаправления - ✗Путать
301и302— слать временный код для постоянного переезда - ✗Опускать заголовок
Locationи ждать, что браузер всё равно перенаправит
Уточняющие вопросы
- →Почему ошибочно закэшированный
301создаёт стойкие проблемы, которых нет у302? - →В чём разница
302,303и307по сохранению метода?
MiddleТеорияЧастоЧто такое REST как архитектурный стиль для веб-API?
Что такое REST как архитектурный стиль для веб-API?
Архитектурный стиль для веб-API: ресурсы адресуются через URL, управляются методами HTTP (GET/POST/PUT/DELETE), обычно обмениваются JSON, опираясь на коды состояния и кэширование HTTP. Ключевые ограничения — отсутствие состояния и единый интерфейс.
Типичные ошибки
- ✗Называть
RESTстрогим протоколом или стандартом, а не архитектурным стилем - ✗Считать, что
RESTтребуетXMLи запрещаетJSON - ✗Хранить состояние клиента на сервере, нарушая ограничение об отсутствии состояния
Уточняющие вопросы
- →Что требует ограничение единообразного интерфейса от
RESTAPI? - →Как отсутствие состояния помогает
REST-сервису масштабироваться горизонтально?
JuniorТеорияИногдаЧто происходит от начала до конца при запуске curl https://avito.ru?
Что происходит от начала до конца при запуске curl https://avito.ru?
curl резолвит хост в IP через DNS, открывает TCP-соединение (трёхстороннее рукопожатие), для https согласует TLS, затем шлёт строку запроса HTTP GET и заголовки. Ответ идёт обратно по стеку (IP, канальный, физический уровни) через прокси к серверу, который собирает тело и отвечает.
Типичные ошибки
- ✗Забывать про
DNS-запрос, превращающий имя хоста в IP до соединения - ✗Пропускать трёхстороннее рукопожатие
TCPили согласованиеTLSдляhttps - ✗Думать, что запрос доходит до сервера без спуска по сетевым уровням
Уточняющие вопросы
- →Где в этом потоке находится обратный прокси вроде веб-сервера
nginx? - →Что меняется в шагах, если URL
http://вместоhttps://?
JuniorТеорияИногдаКак DNS разрешает имя хоста в IP-адрес?
Как DNS разрешает имя хоста в IP-адрес?
DNS (Domain Name System) сопоставляет имя вроде avito.ru с IP. Резолвер проходит иерархию — корень, затем TLD (.ru), затем авторитетный сервер — обычно по UDP/53, с откатом на TCP для больших ответов. Ответы кэшируются на каждом уровне с TTL, поэтому повторные запросы пропускают обход.
Типичные ошибки
- ✗Думать, что
DNS— это одна плоская таблица, а не делегированная иерархия - ✗Забывать, что ответы кэшируются на каждом уровне с
TTL - ✗Считать, что
DNSпо умолчанию работает поTCP, а не поUDP/53
Уточняющие вопросы
- →Почему
DNSдля части ответов откатывается наTCP? - →Что даёт короткий против длинного
TTL, когда IP меняется?
MiddleТеорияИногдаКак управляется кэширование на уровне HTTP?
Как управляется кэширование на уровне HTTP?
Через заголовки ответа. Cache-Control (и устаревший Expires) задают время жизни, видимость и ревалидацию; Last-Modified с If-Modified-Since кэшируют по дате; ETag — по хешу содержимого. Клиент ревалидирует и берёт копию.
Типичные ошибки
- ✗Думать, что кэширование только на клиенте без заголовков от сервера
- ✗Класть
Cache-Controlв URL запроса вместо заголовка ответа - ✗Путать валидацию по дате
Last-Modifiedс валидацией по хешуETag
Уточняющие вопросы
- →Что означает
Cache-Control: no-cacheпротивno-store? - →Почему
ETagлучшеLast-Modifiedдля ресурсов, меняющихся чаще секунды?
MiddleТеорияИногдаКак TCP обеспечивает надёжную упорядоченную доставку?
Как TCP обеспечивает надёжную упорядоченную доставку?
TCP — транспортный протокол с установлением соединения: трёхстороннее рукопожатие открывает соединение, затем данные делятся на нумерованные сегменты, которые получатель подтверждает (ACK). Потерянные сегменты переотправляются, номера последовательности восстанавливают порядок, а скользящее окно конвейеризует множество сегментов, пока контроль перегрузки притормаживает отправителя.
Типичные ошибки
- ✗Называть
TCPпротоколом без соединения или путать его с моделью «отправил и забыл» уUDP - ✗Думать, что
TCPшлёт по одному сегменту, а не использует скользящее окно - ✗Забывать, что контроль перегрузки не даёт быстрому отправителю задавить медленный канал
Уточняющие вопросы
- →Что даёт скользящее окно такого, чего не может схема «остановись и жди» с
ACK? - →Почему трёхстороннее рукопожатие называют дорогой частью
TCP?
MiddleТеорияРедкоЧто такое CGI и каков его главный недостаток?
Что такое CGI и каков его главный недостаток?
Common Gateway Interface — соглашение, по которому сервер запускает внешнюю программу на каждый запрос, передавая данные через переменные окружения и читая ответ HTTP из stdout. Порождение процесса на запрос медленно.
Типичные ошибки
- ✗Думать, что
CGIпереиспользует один процесс, а не порождает на каждый запрос - ✗Считать, что
CGIпередаёт данные только через URL, а не переменные окружения - ✗Полагать, что
CGIтолько дляPython, а не независим от языка
Уточняющие вопросы
- →Как шлюзовые интерфейсы FastCGI и WSGI устраняют затраты на порождение процесса на запрос?
- →Какие переменные окружения читает программа
CGI, чтобы разобрать запрос?
MiddleТеорияРедкоКак работают ETag и условные ответы 304?
Как работают ETag и условные ответы 304?
Сервер прикрепляет к ресурсу валидатор ETag; клиент возвращает его через If-None-Match в следующем запросе. Если ресурс всё ещё совпадает, сервер отвечает 304 с пустым телом, и клиент берёт кэшированную копию; иначе — 200 со свежим содержимым.
Типичные ошибки
- ✗Считать, что
304несёт полное тело, а не пустое - ✗Думать, что
ETag— это путь или метка времени, а не хеш содержимого - ✗Забывать, что клиент возвращает
ETagчерезIf-None-Match
Уточняющие вопросы
- →В чём разница между сильным и слабым
ETag? - →Как
If-None-MatchиIf-Modified-Sinceвзаимодействуют в одном запросе?
MiddleТеорияРедкоЧем UDP отличается от TCP и что такое сокет?
Чем UDP отличается от TCP и что такое сокет?
UDP — транспорт без соединения: нет рукопожатия, нет ACK, нет переотправки — дёшево, малая задержка, но ненадёжно, поэтому годится для голоса, видео, метрик и игр, где потеря датаграммы терпима. Сокет — это абстракция ОС для конечной точки транспорта (файлоподобный дескриптор): stream-сокеты поверх TCP, datagram-сокеты поверх UDP, плюс локальные Unix-сокеты.
Типичные ошибки
- ✗Считать
UDPнадёжным или думать, что он подтверждает датаграммы какTCP - ✗Думать, что сокет привязан к одному протоколу, а не абстракция конечной точки
- ✗Забывать, что число сокетов ограничено лимитом дескрипторов и диапазоном портов
Уточняющие вопросы
- →Почему игра или видеопоток предпочитают
UDPнесмотря на его ненадёжность? - →Что ограничивает число сокетов, которые одна машина может открыть одновременно?
SeniorТеорияРедкоЧем REST и SOAP различаются как подходы к веб-сервисам?
Чем REST и SOAP различаются как подходы к веб-сервисам?
REST — это архитектурный стиль: любой формат (JSON/XML/текст), только HTTP, ориентирован на ресурсы, кэшируемый. SOAP — это протокол: только XML, не зависит от транспорта (HTTP/SMTP), ориентирован на операции, с WS-Security и ACID-транзакциями.
Типичные ошибки
- ✗Называть и
REST, иSOAPпротоколами, тогда какREST— только стиль - ✗Утверждать, что
SOAPподдерживаетJSONи много форматов, а не толькоXML - ✗Говорить, что
RESTтребуетXMLи WS-Security, путая его сSOAP
Уточняющие вопросы
- →Когда WS-Security и гарантии ACID у
SOAPоправдывают его накладные расходы? - →Почему
RESTиспользует кэшированиеHTTP, аSOAPобычно нет?