Как веб-браузер запрашивает и получает веб-страницу? - PullRequest
3 голосов
/ 15 мая 2011

Сегодня мне задали этот интересный вопрос для собеседования.

Подробно объясните процесс, с помощью которого клиентская машина запрашивает файл (скажем, file.php) с сервера, а затем получает этот желаемый файл вместес необходимыми JS / CSS / images / video файлами, и они появляются на экране браузера клиента.

Вот что я знаю и что сказал:

Таким образом, запрос отправляется, затем сервер видит, что запрашивается файл file.php, и, поскольку он имеет расширение .php, он сначала использует механизм PHP для анализа любого кода PHP внутри файла, а затем, как только это будет сделано, он выводит обратно на клиентский компьютер полученный файл file.php (как ответ).Затем браузер принимает этот ответ и анализирует HTML и необходимый код JS и CSS, а затем отображает его в браузере.

Мой ответ довольно простой и не такой подробный, как следовало бы.Я подумал о своем ответе и придумал новые вопросы:

  1. Что буквально означает «запрос»?Это просто текстовый заголовочный файл, который отправляется на сервер?

  2. А как насчет "ответа"?Является ли сам ответ анализируемым файлом file.php, который отправляется обратно клиентскому компьютеру?

  3. Что если файл file.php содержит ссылку на файл script.js и стильфайл .css?На каком этапе эти файлы возвращаются на клиентский компьютер?Они входят как отдельные заголовки или как?

  4. Выше в своем ответе я не уверен, был ли я прав, когда сказал "... потому что он имеет расширение .phpсначала он использует механизм PHP для анализа любого кода PHP внутри файла. "Действительно ли это причина, по которой сервер анализирует код внутри файла, или сервер сканирует ВСЕ виды файлов по умолчанию, чтобы проверить наличие любого кода PHP, который они могут содержать?

Ответы [ 3 ]

7 голосов
/ 15 мая 2011

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

1) Что такое буквально «запрос»?Это просто текстовый заголовочный файл, который отправляется на сервер?

Да, HTTP-запрос - это текстовое сообщение на сервер, включающее, в основном: запрошенный путь, любые параметры этого пути,информация о клиенте (пользовательский агент, сеанс, файлы cookie и т. д.).

2) Как насчет "ответа"?Является ли сам ответ проанализированным файлом file.php, который отправляется обратно клиентскому компьютеру?

В некотором роде.Ответ HTTP состоит из текста заголовка, который описывает: статус ответа (успех или ошибки, такие как файл не найден, внутренняя ошибка сервера и т. Д.), Некоторые метаданные контента (тип контента, кодировка ...) и контент.Содержимое может быть HTML-документом.Это также может быть файл CSS или Javascript, изображение PNG или любые другие файлы, которые обслуживает веб-сервер.Метаданные в заголовке описывают содержимое таким образом, что браузер (или любой клиент) может выяснить, как с ним обращаться.

3) Что если файл file.php содержит ссылкув файл script.js и файл style.css?На каком этапе эти файлы возвращаются на клиентский компьютер?Они входят как отдельные заголовки или как?

Во-первых, процесс, который вы только что описали, закончится.Это означает, что запрос был отправлен, а затем был возвращен ответ.Предполагая, что ответом является HTML-документ, браузер анализирует документ и ищет внешний контент: таблицы стилей CSS, файлы Javascript, файлы изображений, встроенные Flash-файлы и тому подобное.Для каждого из этих внешних файлов браузер отправляет запрос new , используя точно такой же процесс.Например, после получения файла CSS браузер знает, как применить его к документу, который он только что проанализировал.

4) Выше в своем ответе я не слишком уверен, был ли я прав, когдасказал: «... поскольку он имеет расширение .php, он сначала использует механизм PHP для анализа любого кода PHP внутри файла».Действительно ли это причина, по которой сервер анализирует код внутри файла, или сервер сканирует ВСЕ виды файлов по умолчанию, чтобы проверить наличие любого кода PHP, который они могут содержать?

Ну, это зависит отконфигурация сервера, но в большинстве случаев да;Сервер обычно настроен на одинаковую обработку всех файлов .php, то есть передает их анализатору PHP и ожидает его ответа.

Кстати, это отличается для разных программных технологий на стороне сервера.Хотя так работает PHP, другие технологии (например, Ruby on Rails, некоторые языки .NET) обрабатываются по-другому.


Отличный вопрос, и он полезен для вас, чтобы проявить интерес!Для получения дополнительной информации я предлагаю вам проверить HTTP в Википедии .

2 голосов
/ 15 мая 2011

Я думаю, это то, что вы ищете: Что действительно происходит, когда вы переходите по URL

Подведем итог:
1. Вы вводите URL в браузер: facebook.com
2. Браузер ищет IP-адрес для доменного имени
3. Браузер отправляет HTTP-запрос на веб-сервер
4. Сервер фейсбука отвечает постоянным перенаправлением
5. Браузер следует за редиректом
6. Сервер «обрабатывает» запрос
7. Сервер отправляет обратно HTML-ответ
8. Браузер начинает рендеринг HTML
9. Браузер отправляет запросы на объекты, встроенные в HTML
10. Браузер отправляет дополнительные асинхронные (AJAX) запросы

2 голосов
/ 15 мая 2011

HTTP-запрос выглядит как GET /index.html HTTP/1.1.Он отправляется в виде простого текста на веб-сервер.

Упрощенный HTTP-ответ (с удалением большей части заголовков) может выглядеть следующим образом:

HTTP/1.1 200 OK
Content-Length: 20
Content-Type: text/html; charset=UTF-8

<html>Hello</html>

Если страница содержит изображения или таблицы стилей илидругие внешние файлы, веб-браузер отправляет новые запросы для них, один запрос на файл.Веб-сервер возвращает их почти так же, как и HTML.Когда браузер запросил и получил все нужные ему файлы, страница готова.

Веб-сервер должен решить, как он хочет обрабатывать такие вещи, как PHP.Браузеру не нужно знать, что происходит за кулисами.С его точки зрения, он просто запрашивает контент и (надеюсь) получает его.

Простой веб-сервер может быть настроен так, как вы сказали.Если он получает запрос на файл, оканчивающийся на «.php», он сначала запускает его через интерпретатор PHP.Но это полностью зависит от владельца веб-сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...