Я думаю об этом вопросе в течение длительного времени. Это вопрос большой, поскольку он почти охватывает все углы, связанные с веб-разработкой.
В моем понимании, процесс должен выглядеть следующим образом:
- введите 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 будет выполняться отдельный процесс.
Это мое понимание, но я не знаю, правильно оно или нет? Насколько точны? Я что-то пропустил?
Если это правильно (или почти правильно), я надеюсь:
- Сделайте описание шага более точным в ваших словах или напишите ваши шаги, если есть большие изменения.
- Сделайте глубокое объяснение для каждого шага, с которым вы больше всего знакомы.
- Один ответ за шаг. Другие могут внести дополнения в каждый ответный комментарий.
И я надеюсь, что этот поток поможет всем веб-разработчикам лучше понять, что мы делаем каждый день.
И я обновлю этот вопрос на основе ответов.
Спасибо.