Что происходит, когда мы открываем сайт в браузере
medium

Что происходит, когда мы открываем сайт в браузере

Пошаговый рассказ о том, что делает браузер.

Эта статья — короткий и простой перевод статьи «What happens when...», опубликованной на Гитхабе. В ней автор подробно рассказывает, что именно происходит внутри компьютера, когда мы вводим в браузере адрес сайта и нажимаем энтер. Мы убрали излишние технические подробности вроде IRQ-прерываний и ARP-запросов и добавили картинки, чтобы было проще понять суть.

Начало

Мы ввели адрес сайта — thecode.media — и нажали энтер. Что происходит дальше?

Поиск сервера в интернете

Каждый сайт в сети физически хранится на каком-то сервере. Как только браузер от нас получил адрес сайта, он должен понять, к какому серверу обратиться за данными. Но то, что мы называем адресом, на самом деле не адрес, а доменное имя. 

👉 Проще говоря, когда вы садитесь в такси и говорите «Мне в „Мегу“», вы назвали водителю не адрес, а доменное имя. Водитель уже сам должен знать, где в вашем городе «Мега».  

Так вот: теперь задача браузера — определить по доменному имени адрес, на который отправлять запрос. В мире интернета этот адрес называется IP-адресом. Он есть у каждого сервера и выглядит, например, так:

31:184:208:243

По этим числам компьютеры понимают, как связаться друг с другом и отправить нужные данные. Чтобы понять, какой именно IP-адрес у сервера с нашим сайтом, браузер делает так:

  1. Сначала смотрит, посещали мы этот сайт раньше или нет. Если посещали — возьмёт IP-адрес из истории. Так же, как водитель, который тысячу раз ездил в «Мегу». 
  2. Если не посещали — посмотрит в конфигурационных файлах операционной системы. Иногда для ускорения работы некоторые IP-адреса можно прописать в конфигурации компьютера, чтобы он сразу знал, куда обращаться.
  3. Если в настройках такого нет, браузер смотрит недавние адреса в роутере, через который компьютер подключается к интернету. 
  4. Если и там нет, то браузер отправляет запрос на DNS-сервер. Там точно всё есть, но результат получится медленнее, чем в остальных способах.

DNS-сервер — это такая служба в интернете, которая отвечает всем желающим на вопрос «Какой IP у такого-то домена?». Таких серверов в интернете много, и каждый из них знает про свою часть сети. Если у ближайшего сервера нет записей о нашем домене, то он отвечает «Я не знаю, спроси у DNS-сервера покрупнее, вот его адрес». В итоге браузер найдёт DNS-сервер, который знает то, что нам нужно, и получит IP-адрес сервера с сайтом.

Что происходит, когда мы открываем сайт в браузере

Отправка запроса

Браузер нашёл IP-адрес сервера, на котором располагается наш сайт, и отправляет по этому адресу запрос типа «Я знаю, что у тебя есть вот такой домен. Мне нужна вот такая страница с этого домена с такими-то параметрами. Дай, пожалуйста».

Чтобы всё было безопасно и данные никто не перехватил по пути, браузер и сервер договариваются шифровать все сообщения друг другу. Как только все формальности соблюдены, сервер отвечает «Да, конечно, сейчас всё отправлю». Иногда в адресе бывают ошибки, и сервер не может у себя найти нужную страницу. Тогда он отвечает «А у меня нет нужной страницы, ничем не могу помочь», и браузер показывает ошибку.

Сервер думает

Когда сервер получает запрос от браузера и с адресом всё в порядке, он начинает готовить данные к отправке. Для этого он смотрит, какие серверные программы отвечают за этот домен, и говорит им «Соберите мне вот эту страницу, чтобы я её отправил в браузер». Например, на сервере может стоять Вордпресс или PHP-обработчик, который на лету собирает страницу из разных фрагментов кода.

Что происходит, когда мы открываем сайт в браузере

Отправка данных в браузер

Как только сервер получил от своих внутренних программ всё, что ему нужно, он отправляет результат в браузер.

Для этого он нарезает все данные на мелкие пакеты данных по 8 килобайт, нумерует их и отправляет браузеру. Так делается для того, чтобы одновременно передавать много пакетов — в этом случае загрузка идёт быстрее. Нумерация нужна для того, чтобы браузер потом собрал все пакеты в одно целое и получил исходный документ. Если по пути пакет потерялся, браузер говорит серверу «У меня потерялись такие-то пакеты, отправь их ещё раз». И так до тех пор, пока браузер не соберёт все пакеты.

Что происходит, когда мы открываем сайт в браузере

Браузер думает

Когда все пакеты собраны, браузер разбирает документ на составляющие:

  • HTML;
  • CSS;
  • JavaScript;
  • прочий код, который браузер может выполнить.

Это нужно для того, чтобы браузер построил DOM-модель страницы. Такая модель содержит:

  • все элементы, которые есть на странице;
  • связи между ними;
  • как они взаимодействуют между собой;
  • что умеют и как реагируют на действия пользователя.

На основе DOM-модели браузер в итоге будет рисовать страницу на экране.

Что происходит, когда мы открываем сайт в браузере

Отрисовка страницы

Последнее, что нужно сделать браузеру, — взять DOM-модель, найти в ней все видимые элементы и нарисовать их на экране. Если есть JavaScript-код, то он выполняется либо до отрисовки, либо после, смотря как работает скрипт. 

Иногда во время отрисовки страницы браузер может снова запросить данные у сервера. В этом случае браузер рисует то, что есть, а остальное — когда придут данные. Пока данных нет, на странице могут быть пустые места — например, браузер отрисовал верхнее меню и статью, но ещё не подгрузил видео с ютуба. 

Всё готово

Когда страница загрузилась и браузер всё нарисовал, мы видим готовый результат. Но даже сейчас браузер может продолжать работать над страницей:

  • выполнять JS-скрипт;
  • подгружать в фоне музыку или видео;
  • подгружать страницы, на которые переходят с этого сайта чаще всего, чтобы создать эффект моментальной загрузки новых страниц;
  • записывать что-то в куки или в локальное хранилище;
  • собирать данные о том, что вы делаете на странице;
  • и что угодно ещё, что предусмотрели программисты.

Текст и иллюстрации

Михаил Полянин


Редактор

Максим Ильяхов


Художник

Даня Берковский


Корректор

Ирина Михеева


Вёрстка

Мария Дронова


Соцсети

Олег Вешкурцев

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
Собираем сайт-портфолио для фотографа

Используем CSS Grid.

easy
Асимметричное шифрование
Асимметричное шифрование

Сложное, но очень полезное.

medium
Node.js
Почему Node.js — это гуд

Краткое введение в платформу, на которой JavaScript покоряет мир.

medium
У меня большая флешка, но на неё не влезают большие файлы. Почему?
У меня большая флешка, но на неё не влезают большие файлы. Почему?

Рассказываем о файловых системах

medium
Что такое TCP/IP и зачем они нужны
Что такое TCP/IP и зачем они нужны

Рассказ о протоколе, на котором работает весь интернет

medium
Зачем нужно нагрузочное тестирование
Зачем нужно нагрузочное тестирование

Когда обычного тестирования уже недостаточно

easy
Гуманитарий пробует анализ данных на Python. Каково это?
Гуманитарий пробует анализ данных на Python. Каково это?

Мы отправили гуманитария на бесплатный курс в «Яндекс Практикуме». Вот что получилось

easy
Создаём и наполняем базу данных SQLite в Python
Создаём и наполняем базу данных SQLite в Python

Ничего сложного, нужен только SQL

easy
Чистый код: теория и практика
Чистый код: теория и практика

Разбираем основные идеи книги Роберта Мартина

easy
medium
[anycomment]
Exit mobile version