Skip to content
EN
← Все статьи

Как работает сайт: путь запроса от адреса до страницы

Серверная стойка с синими сетевыми кабелями и ноутбук на тележке рядом в дата-центре

Как работает сайт: браузер превращает адрес в IP-адрес через DNS, открывает TCP-соединение с сервером, для HTTPS договаривается о шифровании по TLS, отправляет HTTP-запрос и получает ответ с кодом и HTML. Затем браузер дозапрашивает стили, скрипты и картинки и собирает из них страницу. Каждый шаг ломается по-своему и даёт свою ошибку.

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

Как работает сайт простыми словами

Сайт — это набор файлов и программ на компьютере, который постоянно подключён к интернету и отвечает на запросы. Такой компьютер называют сервером, а место на нём обычно арендуют у хостинг-провайдера. Браузер на вашем телефоне или ноутбуке — клиент: он ничего не знает о сайте заранее, пока не спросит.

Чтобы спросить, браузеру нужны три вещи: адрес сервера в сети (IP-адрес), договорённость о языке общения (протокол HTTP) и, для сайтов с замком в адресной строке, защищённый канал (TLS). Доменное имя вроде example.ru — только удобная для человека подпись к IP-адресу. Всё, что вы видите на экране, браузер собирает сам из ответов сервера.

Отсюда простое правило диагностики: «сайт не работает» почти никогда не означает, что сломалось всё. Обычно отказал один шаг цепочки, и сообщение браузера подсказывает, какой именно.

Что происходит, когда вводишь адрес сайта: 7 шагов

ШагЧто происходитТипичная ошибка в браузереЧем проверить
1. Разбор URLБраузер выделяет протокол, домен, путь; проверяет HSTSПоиск вместо перехода, если адрес написан с ошибкойАдресная строка, DevTools
2. DNSДомен превращается в IP-адрес через резолверDNS_PROBE_FINISHED_NXDOMAIN, ERR_NAME_NOT_RESOLVEDnslookup, dig, /dns
3. TCPТрёхэтапное рукопожатие с сервером на порт 443 или 80ERR_CONNECTION_REFUSED, ERR_CONNECTION_TIMED_OUT, ERR_CONNECTION_RESETTest-NetConnection, nc, /ping, /traceroute
4. TLSПроверка сертификата и выбор ключей шифрованияNET::ERR_CERT_DATE_INVALID, NET::ERR_CERT_COMMON_NAME_INVALID, ERR_SSL_PROTOCOL_ERRORopenssl s_client, /ssl
5. HTTPЗапрос с заголовками, ответ с кодом состоянияСтраницы с кодами 403, 404, 500, 502, 503, 504; ERR_TOO_MANY_REDIRECTScurl -v, HTTP-заголовки, /redirects
6. РендерРазбор HTML, загрузка CSS, JS, картинок, отрисовкаБелый экран, «съехавшая» вёрстка, ошибки в консолиDevTools: Console и Network, /speed
7. CDN и кэшОтвет отдаёт ближайший узел или кэш браузераСтарая версия страницы, ошибки 52x у CloudflareЗаголовки Age, Cache-Control

Шаг 1. Браузер разбирает URL

Адрес https://example.ru/catalog?page=2 состоит из схемы (https), хоста (example.ru), пути (/catalog) и строки запроса (page=2). Если схема не указана, современные браузеры обычно пробуют HTTPS. Если домен есть в списке HSTS (сайт раньше прислал заголовок Strict-Transport-Security или внесён в предзагружаемый список браузера), переход на HTTP даже не выполняется: в DevTools это видно как внутренний редирект с кодом 307.

Если в строке набрано что-то, не похожее на адрес, браузер отправит текст в поисковик. Это первая точка, где «сайт не открывается» на деле означает опечатку.

Как работает DNS-сервер при открытии сайта

Компьютер соединяется только по IP-адресам, поэтому первым делом имя нужно перевести в адрес. Сначала браузер смотрит в свой кэш, затем в кэш операционной системы и файл hosts (в Windows — C:\Windows\System32\drivers\etc\hosts, в Linux и macOS — /etc/hosts). Если ответа нет, запрос уходит на рекурсивный резолвер — DNS-сервер провайдера, роутера или публичный вроде 1.1.1.1 и 8.8.8.8.

Рекурсивный резолвер, если сам не помнит ответ, проходит цепочку: корневые серверы подсказывают, кто отвечает за зону .ru, серверы зоны .ru называют NS-серверы домена, а авторитативный NS-сервер домена возвращает A-запись (IPv4) или AAAA-запись (IPv6). Каждый ответ резолвер кладёт в кэш на время TTL — число секунд, указанное в записи. Поэтому после смены IP часть посетителей ещё какое-то время попадает на старый сервер: их резолверы честно держат прежний ответ до истечения TTL. Подробнее об устройстве системы имён — в статье что такое DNS.

Проверить DNS можно так:

# Windows (cmd или PowerShell)
nslookup example.ru
nslookup example.ru 8.8.8.8
Resolve-DnsName example.ru -Type A

# Linux / macOS
dig example.ru A +short
dig example.ru @1.1.1.1
dig +trace example.ru

Второй аргумент nslookup и @1.1.1.1 в dig задают конкретный резолвер. Если ваш резолвер отвечает иначе, чем публичный, дело в кэше или в подмене на стороне провайдера. dig +trace проходит цепочку от корня сам и показывает, на каком уровне ответ обрывается. В заголовке ответа dig смотрите на поле status: NOERROR — имя найдено, NXDOMAIN — такого имени нет, SERVFAIL — резолвер не смог получить ответ (частая причина — сломанный DNSSEC или недоступные NS-серверы).

В браузере сбой DNS выглядит как DNS_PROBE_FINISHED_NXDOMAIN или ERR_NAME_NOT_RESOLVED. Типичные причины: домен не продлён, у домена не прописаны NS-серверы, в зоне нет A-записи, опечатка в имени. Записи домена снаружи, без влияния вашего локального кэша, показывает проверка DNS. Локальный кэш сбрасывается командой ipconfig /flushdns в Windows, а кэш Chrome — на странице chrome://net-internals/#dns кнопкой Clear host cache.

Как узнать IP-адрес сайта

Те же команды отвечают на вопрос, где физически живёт сайт: nslookup example.ru выдаёт IP, а по IP уже можно понять хостера или CDN. Если домен смотрит на CDN, вы увидите адрес узла сети доставки, а не настоящего сервера — это нормально и сделано намеренно.

Как работает адрес сайта и как его сделать

Чтобы у сайта появился адрес, домен регистрируют у регистратора, указывают для него NS-серверы (обычно хостера или DNS-провайдера) и в зоне домена создают A-запись с IP сервера. После этого любой резолвер в мире сможет пройти описанную выше цепочку. Адрес без A-записи существует, но никуда не ведёт.

Как работает клиент-сервер: TCP-соединение

Получив IP, браузер открывает TCP-соединение. Это трёхэтапное рукопожатие: клиент отправляет пакет SYN, сервер отвечает SYN-ACK, клиент подтверждает ACK. Для HTTPS стандартный порт — 443, для HTTP — 80. Только после рукопожатия по соединению можно передавать данные.

Здесь же видна суть модели «клиент — сервер»: клиент всегда начинает разговор, сервер слушает порт и отвечает. Сервер не может сам «прислать» страницу браузеру, который его не спрашивал; даже живые обновления (чаты, уведомления) работают через соединение, которое открыл клиент.

Что может сломаться и как это выглядит:

  • ERR_CONNECTION_REFUSED — сервер доступен, но на порту никто не слушает: веб-сервер остановлен или порт закрыт, и сервер вернул отказ (RST).
  • ERR_CONNECTION_TIMED_OUT — ответа нет вообще: пакеты теряются по пути, их молча отбрасывает файрвол, или сервер выключен.
  • ERR_CONNECTION_RESET — соединение оборвали посередине: сервер, балансировщик или промежуточное оборудование.

Проверка доступности порта:

# Windows PowerShell
Test-NetConnection example.ru -Port 443

# Linux / macOS
nc -vz example.ru 443

# Путь до сервера
tracert example.ru        # Windows
traceroute example.ru     # Linux / macOS
mtr -rw example.ru        # Linux, отчёт по каждому узлу

В выводе Test-NetConnection важна строка TcpTestSucceeded: True значит, что порт открыт. Учтите, что многие серверы и сети не отвечают на ping (ICMP), поэтому молчащий ping ещё не доказывает, что сайт лежит. Задержку и потери пакетов со стороны покажет проверка пинга, а участок, где маршрут обрывается, — трассировка.

Как работает HTTPS на сайтах: TLS-рукопожатие

Если адрес начинается с https, поверх TCP запускается TLS. Браузер сообщает, какие версии протокола и наборы шифров он поддерживает, и передаёт имя сайта в расширении SNI — так сервер, на котором живут сотни доменов, понимает, какой сертификат отдать. Сервер присылает сертификат и цепочку промежуточных сертификатов, стороны вырабатывают общий ключ, после чего весь обмен шифруется. В TLS 1.3 рукопожатие занимает один обмен сообщениями туда и обратно, в TLS 1.2 — два. Как это устроено по сообщениям, разобрано в статье про TLS-рукопожатие; сам протокол описан в RFC 8446.

Браузер проверяет сертификат по трём пунктам: срок действия не истёк, имя в сертификате совпадает с доменом, цепочка ведёт к корневому центру сертификации, которому доверяет система. Нарушение каждого пункта даёт свою ошибку:

  • NET::ERR_CERT_DATE_INVALID — сертификат просрочен или часы на устройстве пользователя сбиты;
  • NET::ERR_CERT_COMMON_NAME_INVALID — сертификат выдан на другое имя, например только на example.ru, а открывают www.example.ru;
  • NET::ERR_CERT_AUTHORITY_INVALID — самоподписанный сертификат, неполная цепочка или корень, которого нет в хранилище устройства;
  • ERR_SSL_PROTOCOL_ERROR и ERR_SSL_VERSION_OR_CIPHER_MISMATCH — клиент и сервер не договорились о версии или шифре.

Посмотреть сертификат вручную:

openssl s_client -connect example.ru:443 -servername example.ru </dev/null

openssl s_client -connect example.ru:443 -servername example.ru </dev/null 2>/dev/null \
  | openssl x509 -noout -subject -issuer -dates

В конце вывода первой команды ищите строку Verify return code: 0 (ok); любой другой код объясняет, что не так с цепочкой. Вторая команда печатает владельца, издателя и даты действия. Флаг -servername обязателен для серверов с несколькими сайтами: без него вы можете получить сертификат соседнего домена. Со стороны сертификат, цепочку и срок покажет проверка SSL.

Как работает сервер сайта: HTTP-запрос и ответ

Когда канал готов, браузер отправляет HTTP-запрос. В HTTP/1.1 он выглядит как текст: строка запроса и заголовки.

GET /catalog?page=2 HTTP/1.1
Host: example.ru
User-Agent: Mozilla/5.0 ...
Accept: text/html
Accept-Encoding: gzip, br
Cookie: session=...

Заголовок Host говорит серверу, какой из сайтов на этом IP нужен. Дальше запрос обычно принимает веб-сервер (nginx или Apache). Статический файл — картинку, CSS — он отдаёт с диска сам. Динамическую страницу передаёт приложению: PHP-FPM, Node.js, Python, которое читает данные из базы, собирает HTML и возвращает его веб-серверу. Часто перед всем этим стоит обратный прокси или балансировщик, который распределяет запросы между несколькими серверами.

Ответ начинается со строки состояния с кодом, затем идут заголовки и тело:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Cache-Control: no-cache
Set-Cookie: session=...; HttpOnly; Secure
Content-Encoding: br

Код состояния — главное, что стоит проверить при сбое. 2xx — успех, 3xx — перенаправление (адрес в заголовке Location), 4xx — ошибка на стороне запроса (403 — доступ запрещён, 404 — страницы нет), 5xx — ошибка сервера (500 — сбой приложения, 502 и 504 — прокси не получил нормального ответа от приложения, 503 — сервис временно недоступен). Полный список кодов собран в справочнике кодов ответа сервера, а смысл каждого заголовка — в разборе HTTP-заголовков. Формально HTTP определён в RFC 9110.

Весь диалог можно увидеть одной командой:

curl -v https://example.ru/ -o /dev/null
curl -I https://example.ru/
curl -sL -o /dev/null -w "%{http_code} %{url_effective}\n" http://example.ru/

В выводе curl -v строки со звёздочкой — служебная информация (подключение, TLS), строки с > — что отправил клиент, строки с < — что ответил сервер. -I запрашивает только заголовки, а последняя команда проходит по всем редиректам (-L) и печатает итоговый код и конечный адрес. В Windows 10 и 11 используйте curl.exe: в старом Windows PowerShell слово curl — псевдоним другой команды. Ответ сервера снаружи показывают проверка HTTP-заголовков и проверка редиректов; последняя полезна, когда браузер пишет ERR_TOO_MANY_REDIRECTS — сайт перенаправляет сам на себя по кругу.

Протокол HTTP не хранит состояние

Каждый запрос для сервера независим: сам по себе HTTP не помнит, что вы вошли в личный кабинет минуту назад. Эту связь создают cookies — сервер присылает Set-Cookie, браузер возвращает значение в заголовке Cookie с каждым следующим запросом. Поэтому «разлогинивает» чаще всего не сервер, а потерянная или заблокированная cookie.

Как браузер собирает страницу

Получив HTML, браузер начинает его разбирать и строит дерево документа (DOM). Встретив ссылки на стили, скрипты и картинки, он запрашивает их отдельно — часто это десятки дополнительных запросов, в том числе к другим доменам (шрифты, счётчики, CDN). Для каждого нового домена повторяются шаги 2–4: DNS, TCP, TLS. В HTTP/2 и HTTP/3 много файлов с одного домена идут по одному соединению параллельно, в HTTP/1.1 браузер открывает несколько соединений.

Из CSS строится модель стилей, вместе с DOM она даёт дерево отрисовки; затем браузер рассчитывает положение элементов (layout) и рисует их (paint). Обычный <script> без атрибутов async или defer останавливает разбор HTML, пока скрипт не загрузится и не выполнится, — это частая причина медленного первого показа.

Сбои этого шага сервер обычно не видит: он честно ответил 200, а пользователь видит белый экран. Откройте DevTools клавишей F12: во вкладке Console будут ошибки JavaScript, во вкладке Network — какие файлы не загрузились и с каким кодом. Сколько времени занимает загрузка и отрисовка, покажет проверка скорости.

Разложить время ответа по этапам можно и через curl:

curl -o /dev/null -s -w "dns %{time_namelookup}\ntcp %{time_connect}\ntls %{time_appconnect}\nttfb %{time_starttransfer}\ntotal %{time_total}\n" https://example.ru/

Значения накопительные, в секундах от начала запроса. Если большой разрыв между tls и ttfb, медленно работает само приложение или база данных, а не сеть.

CDN и кэш: почему сайт отвечает не с сервера

Многие сайты стоят за CDN — сетью серверов, расположенных ближе к пользователям. DNS такого домена указывает на узел CDN; узел отдаёт сохранённую копию или, если её нет, идёт за страницей на основной сервер (origin). Дополнительно файлы хранит браузер, если сервер разрешил это заголовком Cache-Control.

Отсюда два класса проблем. Первый: после обновления сайта посетители видят старую версию — копия ещё живёт в кэше CDN или браузера. Заголовок Age показывает, сколько секунд ответ пролежал в кэше, а у Cloudflare заголовок CF-Cache-Status сообщает HIT или MISS. Второй: CDN работает, а основной сервер — нет. Тогда ошибку рисует сама сеть доставки; у Cloudflare это коды 52x, например 521 (сервер отказал в соединении), 522 (сервер не ответил вовремя), 525 (не удалось TLS-рукопожатие с сервером).

Статический и динамический сайт: в чём разница для сервера

Статический сайтДинамический сайт
Что отдаёт серверГотовые HTML-файлы с дискаHTML, собранный приложением на каждый запрос
Кто участвуетВеб-сервер или CDNВеб-сервер, приложение, база данных, иногда очередь и кэш
Типичные сбоиDNS, сертификат, 404 после переносаВсё то же плюс 500, 502, 504, медленный ответ базы
ПримерыЛендинг, документацияИнтернет-магазин, личный кабинет, CMS

На каком сервере и у какого провайдера размещать проект, зависит от этого типа; основы аренды сервера разобраны в статье что такое хостинг.

Как проверить, на каком шаге ломается сайт

Идите по цепочке сверху вниз и останавливайтесь на первом шаге, который не прошёл:

  1. Имя резолвится? nslookup example.ru 8.8.8.8. Нет ответа — проблема в домене или DNS. Записи снаружи смотрите в проверке DNS.
  2. Порт открыт? Test-NetConnection example.ru -Port 443 или nc -vz example.ru 443. Отказ или таймаут — сервер, файрвол или сеть.
  3. Сертификат валиден? openssl s_client с -servername или проверка SSL.
  4. Какой код отвечает сервер? curl -I или проверка HTTP-заголовков. 5xx — смотреть логи веб-сервера и приложения.
  5. Код 200, а страница пустая — DevTools, вкладки Console и Network.

Если с вашего компьютера сайт не открывается, а внешние проверки проходят, проблема на вашей стороне: локальный DNS-кэш, файл hosts, расширение браузера, сеть провайдера или корпоративный файрвол.

Частые вопросы

Как работает интернет-сайт без собственного сервера?

Сервер всё равно есть, просто он чужой: хостер, облако или конструктор сайтов держат ваши файлы на своих машинах и отвечают на запросы за вас. Цепочка DNS — TCP — TLS — HTTP остаётся той же.

Почему сайт открывается у меня, но не у других?

Чаще всего из-за DNS-кэша после смены IP: ваш резолвер уже получил новый адрес, чужие ещё держат старый до истечения TTL. Сравните ответы разных резолверов через nslookup имя 8.8.8.8 и nslookup имя 1.1.1.1.

Что быстрее отвечает — HTTP или HTTPS?

HTTPS добавляет TLS-рукопожатие, но в TLS 1.3 это один обмен сообщениями, а HTTP/2 и HTTP/3 браузеры используют только поверх шифрования. На практике разница в скорости определяется сервером и сетью, а не наличием HTTPS.

Что значит «сервер не отвечает», если ping проходит?

Ping проверяет только, что узел отвечает на ICMP. Веб-сервер на порту 443 при этом может быть остановлен — тогда браузер покажет ERR_CONNECTION_REFUSED. Проверяйте именно порт, а не ping.

Где посмотреть, что сайт отправил браузеру?

В DevTools (F12), вкладка Network: выберите запрос, там будут заголовки запроса и ответа, код и время по этапам. Из командной строки то же покажет curl -v.

Проверьте ваш сайт прямо сейчас

Проверить доступность сайта →
Другие статьи: Сети
Сети
Как узнать IP-адрес: свой, компьютера, роутера и сервера
15.08.2026 · 5 479 просм.
Сети
Cloudflare в России: что это, блокировки ECH и что делать
20.07.2026 · 4 911 просм.
Сети
ERR_CONNECTION_RESET: как исправить — пошагово за 5 минут
23.06.2026 · 3 715 просм.
Сети
ERR_CONNECTION_REFUSED: как исправить за 3 минуты — 7 способов
23.06.2026 · 1 954 просм.