Что происходит при вводе URL в адресную строку браузера и нажатии Enter
Что проверяют
Ширину кругозора и умение говорить слоями. У вопроса нет единственно верного ответа: интервьюер смотрит, дойдёте ли вы от нажатия клавиши до отрисовки и не утоните ли в одном любимом слое. На Go-позиции отдельно ждут серверную часть, то есть что происходит после того, как соединение доехало до вашего сервиса.
Как отвечать
Проговорите цепочку крупно, обозначая, что в любой шаг можно углубиться:
- браузер решает, это адрес или поисковый запрос, нормализует строку и сверяется со списком HSTS, поэтому на незащищённую схему он часто даже не ходит;
- разрешение имени: кэш браузера, кэш операционной системы, файл hosts, дальше рекурсивный резолвер, корневые серверы, серверы зоны, авторитативный сервер; ответ живёт по TTL;
- транспорт: рукопожатие TCP или QUIC поверх UDP для HTTP/3, затем TLS, где через SNI выбирается сертификат, а через ALPN версия HTTP;
- запрос доходит до балансировщика или узла CDN, там же обычно снимается шифрование, и внутрь идёт уже обычный HTTP;
- ваш сервис:
net/httpпринимает соединение, поднимает на него горутину, роутер выбирает обработчик, отмена со стороны клиента приходит черезr.Context(); - ответ возвращается, браузер строит DOM и CSSOM, считает раскладку, красит и попутно запрашивает остальные ресурсы.
Где спотыкаются
Рассказывают про DNS и TCP и останавливаются, не дойдя до своего уровня. На бэкенд-собеседовании это половина ответа: ждут, что вы назовёте таймауты сервера, keep-alive, ограничение числа соединений и способ отменить работу, когда клиент уже отвалился.
Считают, что рантайм кэширует DNS. Кэша резолвера в стандартной библиотеке нет, и клиент без переиспользования соединений ходит за адресом на каждый запрос. Соседняя ошибка: не дочитать и не закрыть тело ответа, тогда соединение не вернётся в пул и keep-alive перестанет работать.
Утверждают, что рукопожатие есть всегда. На уже открытом соединении его нет вовсе, TLS свежей версии укладывается в один круг, а возобновление сессии обходится и без него.