Как веб-серверы сопоставляют URL-адреса с файлами и выполняют динамические скрипты

12

Большинство людей считают веб-сервер чем-то вроде магического черного ящика, который создает страницы из ничего. На самом деле это не так. В своей основе его задача удивительно банальна. Веб-сервер извлекает файл с диска и передает его по сети в ваш браузер. Вот и всё. Просто. Прямолинейно.

Давайте проследим, что происходит, когда вы вводите URL-адрес в адресную строку. Представьте, что вы вводите http://www.bygpub.com/books/tg2rw/author.htm. Сервер получает запрос для конкретного пути /books/tg2rw/author.htm. Если бы вы могли заглянуть внутрь конфигурации сервера, вы бы увидели корневую директорию, определенную во время установки, например, c:\My Documents\www. Сервер не ищет /books/tg2rw/author.htm на всем жестком диске. Он ищет этот путь относительно корня. Таким образом, он объединяет два пути: c:\My Documents\www + /books/tg2rw/author.htm. Он находит файл. Отправляет его. Готово.

Но что происходит, когда URL-адрес заканчивается слэшем? Например, http://www.bygpub.com/books/tg2rw/?

Сервер понимает это как запрос к директории, а не к файлу. Ему нужен файл по умолчанию, который следует отобразить. Он не делает случайных предположений. Он следует строгой иерархии. Он ищет index.html. Если его нет, он пытается найти index.htm. Если и это не удается, он проверяет наличие default.html. Наконец, он пытается найти default.htm. Точный список зависит от программного обеспечения сервера, но логика остается неизменной. Сервер незаметно преобразует URL-адрес директории в URL-адрес файла, добавляя первое найденное совпадение. Таким образом, запрос к директории превращается в http://www.bygpub.com/books/tg2rw/index.htm. Вы никогда не видите изменения имени файла. Вы просто видите загрузку страницы. Каждый другой файл в этой директории требует явного указания имени. Это базовый уровень обработки статических файлов.

За пределами статических файлов: роль CGI

Статические файлы — это только половина истории. Большинство современных веб-серверов также обрабатывают динамические файлы. Они не генерируют эти страницы на лету с нуля; они передают запрос внешней программе. Этот механизм называется Common Gateway Interface (Общий шлюзовой интерфейс), или CGI.

Вы использовали CGI бесчисленное количество раз, даже не подозревая об этом. Это двигатель любой веб-страницы, которая изменяется в зависимости от вашего ввода. Рассмотрим следующие примеры:

  • Гостевые книги : Вы вводите сообщение в HTML-форму. Сервер не просто отправляет заранее написанную страницу. Он запускает скрипт, который добавляет ваш текст в базу данных или файл, а затем генерирует новую страницу, отображающую вашу запись.

  • WHOIS-запросы : Вы вводите имя домена в форму. Страница, которую вы получаете, полностью зависит от введенного вами домена. Сервер не обслуживает статический файл; он просит программу получить актуальные данные.

  • Поисковые системы : Вы вводите ключевые слова. Сервер выполняет запрос, сканирует индексы и динамически создает страницу результатов, адаптированную под ваш поиск.

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