PHP - Урок 3. Как работает сервер.
Программа на компьютере, который подключен к Интернету и слушает какой-либо порт называется серверором. Она например, может прослушивать порт 80. (на самом деле в 80% случаев порты слушает специальная программа inetd, потом просто запускает программу, которая подписана на определенный порт и направляет ей поток данных, приходящий в порт).
Запустившись программа-сервер (такая как apache или nginx) читает запрос от клиента, и в соответствии с ним что-то делает. Например от предыдущего нашего запроса:
GET /test/page.html HTTP1.1
Host: thesite.ru
User-Agent: Mozilla/5.0 (X11; U; Linux i686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.0b5
Accept: text/html
(пустая строка)
сервер узнает, что мы хотим от него получить(GET) файл, который находится по пути /test/page.html и что мы используем версию протокола HTTP - 1.1
Однако есть еще один немаловажный момент. Что если на одном сервере с одним IP находится много сайтов. А здесь как раз в дело вступает заголовок Host.
Дело в том, что когда мы настраиваем сервер, мы обязательно указываем в его конфигурации, какие сайты на нем будут работать. Для этого мы добавляем в главный файл ссылку на папку с файлами-хостами или прописываем их прямо в главном файле настроек.
По русски выглядет это примерно так
Виртуальный хост:
Имя хоста: thesite.ru
Порт: 80
Путь к файлам хоста: /var/www/thesite.ru/
Ошибки и логи сюда /var/logs/wwwlogs/thesite.ru/
После этого мы перезапускаем сервер - он считывает конфигурацию (файлы с настройками) и узнает, что у него новый виртуальный хост, у которого имя thesite.ru
Теперь если на порт 80 приходит запрос, то программа-сервер зачитывает заголовок Host и ищет есть ли где в его конфигурации такое название хоста.
Если он его находит, то он подставляет Путь к файлам хоста к тому что запрошено в GET. То есть теперь у нас получается такой запрос
/var/www/thesite.ru/test/page.html
сервер находит этот файл (или не находит 404-Not found) и отдает его клиенту, предварительно подготовив ответ для протокола HTTP
Выглядит ответ сервера примерно так:
HTTP/1.1 200 OK
Date: Mon, 30 Jan 2017 14:30:59 GMT
Server: Apache
X-Powered-By: PHP/5.2.4-2ubuntu5wm1
Last-Modified: Mon, 30 Jan 2017 14:30:59 GMT
Content-Language: ru
Content-Type: text/html; charset=utf-8
Content-Length: 1234
Connection: close
(пустая строка)
(далее следует запрошенная страница в HTML у нас это файл page.html из папки test сайта)
Здесь сервер отвечает 200 OK - что означает, что запрошенный в GET файл найден (если бы не нашел прислал 404). Другие заголовки также важны браузеру, например время и время последней модификации позволяет ему работать с кэшем страниц.
Опять же пустая строка как и в случае запроса отделяет заголовки ответа от самих данныx. В нашем случае вслед за заголовками передается html-страница.
Затем браузер, загрузив страницу, берет и отрисовывает ее нам, как мы привыкли их видеть.
Привет!
Этот пост был выбран Академией Голоса и попал в список программы поддержки качественных образовательных постов.
Ссылка на твой пост будет опубликована в отчете Академии.
Пожалуйста, сделай следующие посты более содержательными и включай ссылки на дополнительные источники информации по теме.
Спасибо за полезный контент (ノ◕ヮ◕)ノ*:・゚✧
Спасибо! :)