Меня недавно спросили об этом на собеседовании, особенно когда я набираю facebook.com. Я не совсем уверен, что именно собеседник искал именно с тех пор, как я подавал заявку на должность программиста, но как можно ответить на этот вопрос на высоком уровне?
4 ответа
Общий обзор HTTP-запроса от браузера:
- Вы вводите "facebook.com" в адресную строку.
- Браузер разрешает это для числового IP-адреса (это может быть кэшировано ОС или может потребоваться отключение от DNS-сервера).
- Браузер выдает запрос «HTTP /GET». Он передает запрос HttpRequest, который включает метаданные о браузере, предпочтения пользователя (например, предпочитаемый язык) и любые сохраненные файлы cookie для этого домена.
- Серверы Facebook получают запрос, и их код начинает формировать ответ.
- Facebook будет использовать переданную информацию, включая куки, чтобы определить, кто пользователь и какую информацию отправить обратно
- HTTP-ответ возвращается с Facebook, включая строку состояния (200 OK и т.д.). Заголовки, которые включают тип контента и т.д. И тело HTML.
- Браузер получает ответ и начинает анализировать его для отображения.
- Тело HTML будет содержать ссылки на CSS, JS и изображения. Все это вызовет дополнительные вызовы обратно на серверы, чтобы получить эти биты
- Движок макета браузера начнет собирать последнюю страницу для отображения.
- Информация CSS может изменить макет и внешний вид страницы
- JS и DHTML могут изменить макет страницы
- Последняя страница собирается и передается конечному пользователю.
Статья в гипертекстовом протоколе Википедии является хорошей отправной точкой для жизненного цикла HTTP-запроса.
Поскольку вы не упомянули, относится ли это к конкретному программированию, сети или операционной системе, я решил предположить, что это на уровне сети.
Когда вы вводите адрес сайта, который хотите увидеть, и нажимаете Enter, ваш компьютер / браузер сначала проверит, кэшируется ли IP-адрес этого домена где-то на уровне браузера или операционной системы. Если нет, он попытается определить IP-адрес этого доменного имени, связавшись с DNS-сервером. Ваша операционная система работает вручную или автоматически через DHCP, настроенный с IP-адресом одного или нескольких DNS-серверов, с которыми она может связаться.
В какой-то момент запрашиваемый DNS-сервер ответит IP-адресом сервера / устройства, связанного с введенным вами доменным именем. Теперь пакеты TCP / IP можно создавать и отправлять по проводной связи в домен, который вы ввели, чтобы начать передачу и передачу данных назад и вперед, чтобы предоставить вам запрашиваемый контент.
Как и почти на все вопросы интервью, интервьюер не искал конкретного ответа, но стремился увидеть ваш уровень понимания процесса и заставить вас пройти их через ваш мыслительный процесс. Скорее всего, они искали, сможете ли вы идентифицировать различные компоненты (браузер, интернет-провайдер, HTTP, TCP, DNS, ядро, веб-сервер) и объяснить, как они взаимодействуют.
Я попробую, хотя он (очевидно) может сильно различаться от сайта к сайту, от браузера к браузеру, и именно то, что он хотел или направление, из которого он шел. Один менеджер по найму может захотеть очень детального подхода ко всему процессу и вашего знакомства с Facebook (если вы потенциально собираетесь работать над плагином Facebook), с которым я не слишком знаком. Я опущу материал процесса.
- Введите "Facebook.com" в адресную строку
- DNS должен разрешить до
- По мере загрузки Facebook он будет обнаруживать или создавать файлы cookie на основе того, был ли пользователь там ранее.
- Если есть файлы cookie, Facebook может войти в систему, если нет, отобразится страница входа и / или страница регистрации.
- Используется вход пользователя в систему, адрес электронной почты без учета регистра и поле пароля secureString с маской.
- Кнопка входа в систему выбрана, безопасный пароль добавляется, хэшируется и сравнивается с соответствующим сохраненным паролем для представленного имени пользователя, и подтверждают, что оба соответствуют записи.
- В случае успеха, покажите Facebook «WALL», в противном случае отобразите сообщение об ошибке и повторите попытку. JS должен хранить недопустимую попытку в течение максимум X попыток, а также записывать в пользовательскую запись недопустимую попытку в случае грубой силы.