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

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

t.me/qa_chillout

Когда вы вводите адрес сайта (например, example.com) в строку браузера и нажимаете Enter, за кулисами происходит много процессов, которые позволяют вам в итоге увидеть запрашиваемую веб-страницу. В этой статье хотим подробно разобрать основные процессы.

Ввод адреса сайта в браузере и поиск в кэше

Когда вы вводите адрес сайта в браузере, то самым первым шагом выполняется проверка локального кэша. Это важно, так как кэширование позволяет существенно ускорить доступ к данным, которые уже были загружены ранее, и избежать повторных запросов в сеть. 

Разберем подробнее проверку кэша DNS. Когда вы вводите доменное имя (например, 'example.com'), браузеру нужно сопоставить это имя с конкретным IP-адресом, чтобы установить связь с нужным сервером. Этот процесс называется DNS-запросом.

Но если вы недавно посещали этот сайт, то его IP-адрес мог сохраниться в локальном кэше*, что позволяет пропустить обращение к внешним DNS-серверам и уменьшает нагрузку на сеть. Если данные не найдены или они устарели, браузер отправляет запросы на сервер для получения свежей информации.

* DNS-кэш — это временное хранилище записей сопоставления доменных имен и IP-адресов.

Кэш DNS может храниться в нескольких местах:

  - операционной системе – в каждой операционной системе есть собственный кэш DNS. Если браузер делает DNS-запрос, операционная система сначала проверяет, есть ли в локальном кэше сохранённая информация о запрашиваемом домене.

  - в браузере – современные браузеры также имеют собственный кэш DNS, чтобы ускорить загрузку страниц.


А как же работает проверка DNS-кэша?

Во-первых, браузер сначала проверяет свой собственный DNS-кэш. Если запись о домене найдена, то запрос в кэш ОС и на внешний DNS-сервер не требуется, и браузер сразу получает IP-адрес сайта.

Во-вторых, если запись в кэше браузера не найдена, браузер обращается к DNS-кэшу операционной системы. Если операционная система найдёт соответствующую запись, она вернёт IP-адрес браузеру.

В-третьих, каждая запись в DNS-кэше имеет ограниченный срок жизни (TTL). Это означает, что по истечении этого времени запись считается устаревшей и должна быть удалена. Если запись просрочена, DNS-запрос будет отправлен на сервер для обновления данных.


Разберем на примере:

Допустим, вы уже посещали 'example.com' на этой неделе. В локальном кэше вашего браузера или операционной системы может храниться информация о том, что IP-адрес 'example.com' равен, например, '93.184.216.34'. Если срок действия этой записи (TTL) ещё не истёк, браузер воспользуется этой информацией и не станет отправлять запрос на DNS-сервер. Это позволяет быстрее установить соединение с сервером.

Если страница уже была загружена ранее, некоторые её элементы могут быть сохранены в кэше браузера. Это позволяет загружать страницу быстрее, так как не нужно каждый раз запрашивать те же ресурсы у сервера.

А что же может храниться в кэше браузера:

1) HTML-файлы.

2) Стили, которые отвечают за внешний вид страницы (цвета, шрифты, расположение элементов).

3) Графические элементы, такие как логотипы, фоны, иконки и фотографии.

4) Скрипты, которые отвечают за интерактивность страницы (например, анимации, обработку форм и т.д.).

5) Если страница использует специальные шрифты, они также могут быть кэшированы.

При повторном посещении сайта браузер проверяет, есть ли уже загруженные версии этих ресурсов в его кэше. Если данные найдены в кэше и они актуальны, браузер загружает их локально, не обращаясь к серверу.


А если браузер в кэше не нашел?

Если браузер не находит IP-адрес запрашиваемого сайта в локальном кэше, он переходит к следующему этапу — DNS-запросу. Это процесс, при котором браузер и операционная система пытаются выяснить, какой IP-адрес соответствует введённому доменному имени (например, 'example.co'). 

Начать хочется со всем известного определения DNS (Domain Name System) — это глобальная система, которая сопоставляет доменные имена с IP-адресами. Представьте себе DNS как телефонную книгу для интернета: она переводит имена сайтов, понятные человеку, в числовые адреса, которые понятны компьютерам.

После того, как вы ввели доменное имя в адресной строке и нажали «Enter», сначала происходит локальный DNS-запрос. Иными словами, браузер, через операционную систему, отправляет DNS-запрос на локальный DNS-сервер. Обычно этот сервер предоставляется вашим интернет-провайдером. Этот сервер хранит информацию о доменах, которые недавно запрашивались пользователями сети провайдера. Если IP-адрес для домена 'example.co' уже сохранён в памяти локального DNS-сервера, он сразу вернёт этот IP-адрес.

Если локальный DNS-сервер не знает, какой IP-адрес соответствует запрашиваемому доменному имени, он передаёт запрос дальше, по цепочке DNS-серверов.


Как это происходит:

1. Если локальный DNS-сервер не может найти IP-адрес, он отправляет запрос на один из корневых DNS-серверов. Это специальные серверы, которые управляют запросами для всего интернета. Корневой сервер не знает IP-адреса для конкретного сайта, но он направит запрос на сервер домена верхнего уровня, связанный с вашим запросом (например, для домена '.com').

2. Далее запрос передаётся на сервер домена верхнего уровня (например, для доменов с расширением '.com', '.org', '.net'). Этот сервер также не знает точный IP-адрес для 'example.com', но он знает, где находится авторитетный DNS-сервер для домена 'example.com'.

3. Авторитетные DNS-серверы отвечают за конкретные домены. В нашем случае сервер для домена 'example.com' знает точный IP-адрес, к которому нужно обращаться. Авторитетный DNS-сервер возвращает нужный IP-адрес (например, '93.184.216.34') локальному DNS-серверу.

4. Когда IP-адрес найден, он передаётся обратно через всю цепочку серверов к локальному DNS-серверу, а затем — вашему браузеру. Теперь браузер знает, какой сервер обслуживает сайт 'example.com', и может отправить запрос на этот сервер.

5. Чтобы сократить время ответа при будущих запросах, кэширование происходит на каждом уровне:

  • Кэширование в браузере – браузер сохранит IP-адрес на определённое время (зависит от политики TTL — Time to Live, указанной авторитетным DNS-сервером).
  • Кэширование в операционной системе – операционная система также сохранит эту информацию.
  • Кэширование на локальном DNS-сервере – DNS-сервер вашего провайдера тоже сохранит этот IP-адрес, чтобы ускорить запросы для других пользователей, которые могут обратиться к этому же домену.


Пример последовательности DNS-запроса:

1. Браузер пытается найти 'example.com' в своём кэше DNS.

   - Не находит.

2. Операционная система проверяет свой кэш DNS.

   - Не находит.

3. Локальный DNS-сервер (DNS-сервер вашего интернет-провайдера) проверяет свой кэш.

   - Не находит.

4. Локальный DNS-сервер запрашивает информацию у корневого DNS-сервера.

   - Корневой сервер направляет запрос на сервер домена верхнего уровня (например, '.com').

5. Сервер домена верхнего уровня направляет запрос на авторитетный DNS-сервер для домена 'example.com'.

6. Авторитетный DNS-сервер возвращает IP-адрес домена.

7. IP-адрес передаётся обратно через цепочку серверов к локальному DNS-серверу, затем к операционной системе и браузеру.


Установление соединения с сервером

Теперь, когда браузер знает IP-адрес, он должен установить соединение с сервером (TCP/IP Connection) по этому адресу:

  • Браузер открывает соединение с сервером, используя протокол TCP (Transmission Control Protocol). Это трёхэтапный процесс, называемый трёхстороннее рукопожатие:
  • Браузер отправляет запрос SYN (synchronize).
  • Сервер отвечает SYN-ACK (synchronize-acknowledge).
  • Браузер отправляет ACK (acknowledge), и соединение устанавливается.
  • Если сайт использует HTTPS (более безопасный протокол), браузер также выполняет процесс установки защищённого соединения с использованием TLS (Transport Layer Security).


Отправка HTTP/HTTPS-запроса

После установления соединения браузер отправляет HTTP или HTTPS-запрос на сервер. Основная цель этого запроса — получить данные с сервера:

  • Запрос содержит информацию о типе запроса (например, GET — запросить страницу) и пути к ресурсу (например, /index.html).
  • В запросе также передаются заголовки (headers), которые могут включать информацию о браузере, типе контента, поддерживаемых форматах и т.д.
  • Если используется HTTPS, все данные шифруются.


Ответ сервера

Сервер обрабатывает запрос и отправляет обратно ответ:

  • Код состояния, например, 200 OK означает, что запрос был успешно выполнен.
  • Тело ответа – это могут быть данные страницы — HTML-код, изображения, стили, JavaScript и другие ресурсы.
  • Заголовки ответа – дополнительная информация, такая как тип контента (Content-Type), кэширование и другое.


Рендеринг страницы

Как только браузер получает ответ от сервера, он начинает обрабатывать (рендерить) страницу:

  • HTML – разбирается и отображается структура страницы.
  • Затем применяются стили, чтобы задать внешний вид элементов.
  • Если на странице есть скрипты, они загружаются и выполняются для добавления интерактивности.
  • Если на странице есть ссылки на внешние ресурсы (изображения, шрифты, видео и т.д.), они также загружаются.

Важно что некоторые ресурсы могут загружаться асинхронно с использованием технологий, таких как AJAX или fetch API, что позволяет странице не перезагружаться полностью, а получать данные частично.


Закрытие соединения

После завершения обмена данными, соединение с сервером может быть закрыто, хотя современные браузеры могут держать соединение открытым на случай дополнительных запросов (например, для загрузки других ресурсов или обновления страницы).


Весь этот процесс обычно происходит за доли секунды.


В качестве резюме хочется вкратце пройтись еще раз по шагам, которые выполняются после того, как мы ввели доменное имя в адресную строку в браузере:

  1. Проверка кэша на наличие данных.
  2. DNS-запрос для нахождения IP-адреса домена.
  3. Установление TCP/IP и (при необходимости) TLS-соединения.
  4. Отправка HTTP/HTTPS-запроса.
  5. Получение ответа от сервера.
  6. Рендеринг страницы и загрузка дополнительных ресурсов.


Обсудить статью, узнать больше можно в телеграм канале «Тестировщики нужны».

Report Page