Подтвердить что ты не робот

Каков полный процесс ввода URL-адреса в адресную строку браузера, чтобы получить отображаемую страницу в браузере?

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

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

  • введите URL-адрес в адресную строку
  • запрос будет отправлен на DNS-сервер на основе конфигурации вашей сети.
  • DNS отправит вас к реальному IP-адресу доменного имени
  • запрос (с полным заголовком Http) будет отправлен на сервер (с 3 IP-адресом для идентификации) 80-port (предположим, что мы не укажем другой порт)
  • сервер будет выполнять поиск в портах прослушивания и перенаправлять запрос в приложение, которое слушает 80-й порт (скажем, nginx здесь) или на другой сервер (тогда 3-й сервер будет похож на балансировщик нагрузки)
  • nginx будет пытаться сопоставить URL-адрес с его конфигурацией и напрямую ссылаться на статическую страницу или вызвать соответствующий script intepreter (например, PHP/Python) или другое приложение для получения динамического содержимого (с помощью запроса БД или другого логик)
  • html будет отправлен обратно в браузер с полным заголовком ответа Http
  • браузер будет анализировать DOM html, используя его синтаксический анализатор
  • внешние ресурсы (JS/CSS/images/flash/videos..) будут запрашиваться последовательно (или нет?)
  • для JS, он будет выполнен движком JS
  • для CSS, он будет отображаться движком CSS, а отображение HTML будет скорректировано на основе CSS (также в последовательности или нет?)
  • если в DOM есть iframe, то с этапа 1-12 будет выполняться отдельный процесс.

Это мое понимание, но я не знаю, правильно оно или нет? Насколько точны? Я что-то пропустил?

Если это правильно (или почти правильно), я надеюсь:

  • Сделайте описание шага более точным в ваших словах или напишите ваши шаги, если есть большие изменения.
  • Сделайте глубокое объяснение для каждого шага, с которым вы больше всего знакомы.
  • Один ответ за шаг. Другие могут внести дополнения в каждый ответный комментарий.

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

И я обновлю этот вопрос на основе ответов.

Спасибо.

4b9b3361

Ответ 1

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

  • Уровень DNS может помочь перенаправить клиентов на разные серверы на основе географического местоположения, чтобы помочь с балансировкой нагрузки и минимизацией времени ожидания, а один сервер может отвечать на запросы от разных DNS-имен.
  • Браузер может выполнять различные типы запросов (GET, POST, HEAD и т.д.) и обычно включает несколько разных заголовков, включая файлы cookie, возможности браузера, языковые настройки и т.д.
  • Большинство браузеров обычно поддерживают кеш, чтобы избежать многократно загружаемого материала и использовать различные методы, чтобы определить, действительна ли кешированная версия файла.
  • В современных веб-страницах часто сложное взаимодействие между различными типами файлов (HTML, CSS, изображения, JavaScript, видео, Flash,...), а веб-разработчикам часто требуется подробное знание различий между браузерами, чтобы сохранить их страницы, работающие для всех

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

Ответ 2

Здесь я могу описать одну точку -

Определение того, какой файл/ресурс необходимо выполнить, какой языковой интерпретатор загружается.

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

Когда веб-сервер (например, apache) получил URI, он проверяет, существует ли существующее правило перезаписи, соответствующее ему. В этом случае выполняется переписанный URI. В любом случае, если для завершения URI нет имени файла, загружается файл по умолчанию, который обычно является index.html или index.php и т.д. В соответствии с расширением имени файла соответствующий модуль apache для серверной части поддержка языка программирования загружается, например mod_php для PHP, mod_python в случае python. Соответствующий интерпретатор языка на стороне сервера (учитывая интерпретируемые языки, такие как PHP) затем готовит окончательный HTML или вывод в какой-либо другой форме для веб-сервера, который, наконец, отправляет его как ответ HTTP.

Ответ 3

Я также искал то же самое и нашел, что этот удивительный подробный ответ строится совместно github