Как работает PHP с HTTP и запросами POST, GET

Начинается всё с веб-сервера (Apache или Nginx, для простоты возьмём Apache), который держит открытым 80й порт. Допустим, наш вебсервер запущен на физической машине с IP=11.22.33.44. И там установлен сайт с привязанным доменом myhost.com. Посмотрим как будет обработан запрос POST по адресу http://myhost.com/submit.php?id=5.

Как только на порт 80 физической машины с IP=11.22.33.44 приходит HTTP-пакет, сервер его анализирует.

В первую очередь он смотрит значение HOST в пакете. У нас оно равно myhost.com. Сервер перебирает список виртуальных хостов в своей конфигурации и если находит такой хост, то устанавливает текущую папку (DOCUMENT_ROOT) в соответствии с этой конфигурацией. Допустим, нашёл, и DOCUMENT_ROOT=/var/www/myhost.com/

Далее вебсервер анализирует значение PATH в HTTP-пакете. У нас оно равно /submit.php?id=5. По умолчанию сервер смотрит на расширение и понимает, что нужно запустить интерпретатор php и передать ему файл submit.php, лежащий в корне DOCUMENT_ROOT, а именно в нашем случае /var/www/myhost.com/submit.php. (Замечу, что дефолтовая функциональность часто переопределяется «дополнительным конфигом» апача, лежащим в файле .htaccess. Например, это может быть ряд правил RewriteRule, заставляющих апач иначе обрабатывать PATH).

При запуске интерпретатора сервер не только передаёт ему имя файла скрипта, но и весь HTTP-пакет целиком, для дальнейшего анализа.

Интерпретатор при запуске делает следующую вещь.

Он смотрит HTTP-пакет и анализирует его тип (POST, GET или другое). Если GET, он просто берёт QUERY (у нас оно равно id=5) и раскладывает его в ассоциативный массив $_GET в виде array(‘id’ => ‘5’).
Если запрос типа POST, то он в дополнение к вышеописанному анализирует тело HTTP-пакета и раскладывает эти данные в массивы $_POST и $_FILES.

Например, если вы передавали форму авторизации с полями login и password методом POST, то в теле HTTP-пакета будут такие данные 

login=user1&password=mypass

которые попадут в $_POST в виде array(‘login’ => ‘user1’, ‘password’ => ‘mypass’).

В итоге всего этого в самом начале работы скрипта submit.php в переменных $_GET, $_POST, $_FILES, $_SERVER (и на самом деле ещё многих других) мы можем найти данные из HTTP-заголовка, которые интерпретатор обработал и разложил для нашего удобства.

Вот и всё. Программируйте правильно!

Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии