Вы находитесь на странице: 1из 4

Лекции курса PHP7 + MySQL с нуля

(краткое содержание)

ЛЕКЦИЯ 38. РАБОТА С СЕТЬЮ. URL. ЗАГОЛОВКИ. МЕТОДЫ GET И POST

Это первая лекция раздела «Работа с сетью», в которой Вы изучите основы


передачи данных в сети интернет посредством методов GET и POST. Узнаете, что
такое заголовки запроса и каким образом они формируются.
Кроме того, в этом разделе Вы рассмотрите такие возможности, как
оформление и работа с интерактивными формами, а также отправка электронной
почты с помощью сценариев.

URL. Структура
Начнем с того, из чего состоит URL, каков его формат.
Общая форма URL можно представить следующим образом:
http://www.example.com.ru.sub:NN/path/to/page.ext?param
Для начала стоит отметить, что в силу общепринятых стандартов, в браузерах
в адресе не указывается один символ, означающий корневой домен – «.».
Ставится этот символ в конце всех символов, отражающих полный адрес
домена: www.example.com.ru.sub. (корневой домен выделен красным).
Разберемся, что есть что в этой строке.
1) http:// - это выбранный протокол передачи данных (HyperText Transfer
Protocol), базирующийся на протоколе TCP;
2) www.example.com.ru.sub – домен N-го уровня или имя хоста, где опущен
корневой домен «.».
Таким образом, чтение адреса происходит не слева направо, а наоборот –
справа налево. Так, при обращении по указанному адресу, сначала происходит
определение адреса корневого домена – DNS-сервера, запущенного на этом
домене, затем определяется запрос о домене sub, после – о ru и так далее до www.
Как только обрабатываются все запросы, возвращается точный IP-адрес домена
www.example.com.ru.sub.
В случае, если выбранный хост не является виртуальным, ему выделен
определенный IP-адрес, который и является точным адресом, приписанным к
имени хоста.
3) :NN – зарезервированный протоколом TCP номер порта, через который
происходит обмен сообщениями с сервером. После установления соединения
через порт, между машиной пользователя (клиентом) и сервером устанавливается
соединение, которое называют логический канал связи и, в дальнейшем, обмен
данными осуществляется через него. В связи с тем, что на данный момент уже
определены некоторые стандарты взаимодействия в сети, обычно используется
ряд стандартных портов: 80, 443. Таким образом, в повседневной жизни
пользователю нет необходимости самостоятельно определять номер порта – за
него это осуществляет браузер.
4) /path/to/page.ext – путь к определенной странице с расширением ext. В связи
с тем, что создание страниц в веб-приложении может осуществляться
динамически, ее физическое наличие на сервере не является обязательным. Так,
на сайтах-блогах или тематических новостных сайтах Вы можете отправить запрос,
содержащий, например, интересующую Вас тему и в ответ будет сформирована
страница, которой изначально на сервере не существует. Кроме того, указанный
путь может вести к какому-либо файлу, не относящемуся непосредственно к работе
приложения, например, графическому файлу в случае перехода по ссылке на его
загрузку и т.п.

1
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

5) ? – разделитель, который указывает на переход к параметрам запроса.


После этого символа все последующие будут восприниматься, как строка запроса
к сценарию, управляющему поведением страницы. В большинстве своем Вы
столкнетесь с CGI или FastCGI интерфейсы поведения сценариев.
6) param – набор символов, которые управляют поведением сценария. Стоит
учитывать, что некоторые используемые символы должны кодироваться. Так, в
строке параметров запроса нельзя использовать символ пробела, т. к. он будет
воспринят, как окончание строки параметров.
Рассмотрим пример строки запроса в браузере:
http://www.example.com/page/script.php?name=John&age=20
Так, мы выбрали протокол http, который обращается к имени хоста
www.example.com. По адресу этого хоста на сервере в папке page или папке с
предопределенным псевдонимом (да, такое тоже возможно) page находится файл
script.php. Этому файлу передаются следующие параметры:
- параметр name, содержащий значение John;
- параметр age, содержащий значение 20.
Таким образом с помощью запроса можно передать практически любой набор
параметров.

Заголовки запроса
Что же получается, когда отправляется запрос через строку браузера?
Передается ли полностью вся информацию только через строку запроса?
На самом деле все немного сложнее.
Так, разделяют понятие запроса и заголовков запроса.
В итоге общий вид посылаемого браузером запроса выглядит следующим
образом:
GET request_parameters HTTP/1.0\n
…headers…
\n\n
Состав запроса следующий:
- GET – метод запроса, определяющий способ передачи информации;
- request_parameters – строка запроса;
- HTTP/1.0 – протокол передачи данных;
- …headers… - строки, формируемые браузером и передаваемые в запросе
после непосредственно самой строки запроса и протокола.
Вот эти строки и называются заголовками и могут содержать в себе различную
информацию.
Среди таких заголовков могут быть как обрабатываемые сервером, так и
передаваемые посредством переменных окружения – именованных значений
параметров, которые ОС передает запущенной программе.
Рассмотрим некоторые из возможных передаваемых параметров запроса и
заголовков:
А) GET – метод передачи запроса, основной особенностью которого является
передача через строку браузера.
Формат метода:
GET script?parameters HTTP/1.0
В случае, если не используется альтернативный метод POST, это заголовок
запроса является обязательным. Стоит заметить, что вместо протокола HTTP/1.0
может использоваться и HTTP/1.1

2
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

Строка script?parameters построена в точности, как передается через строку


запроса браузера.
В переменной окружения REQUEST_METHOD сохраняется слово GET.
В переменной окружения QUERY_STRING сохраняется значение запроса
parameters.
Часть запроса, расположенная после корневого домена и номера порта
сохраняется в переменной окружения REQUEST_URI (URI – Universal Resource
Identifier).
Б) POST – метод передачи запроса, особенностью которого является передача
запроса в теле заголовков.
В переменных окружения отличие:
REQUEST_METHOD содержит значение POST.
Также, одной из особенностей метода POST от GET является возможность
передачи файлов.
В) Заголовок Content-Type
Content-Type: application/x-www-form-urlencoded
Содержится в переменной окружения CONTENT_TYPE
Идентифицирует тип передаваемых данных методами GET или POST.
Г) Заголовок Host
Host: host_name
Переменная окружения: HTTP_HOST
Заголовок, содержащий имя хоста, указанное в адресной строке.
Часто путают с переменной SERVER_NAME. В большинстве случаев они
содержат одно значение, но встречаются ситуации, при которых SERVER_NAME
содержит строку, строго прописанную в конфигурации сервера и она может
отличаться от имени хоста.
Д) Заголовок User-Agent
Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/71.0.3578.98 Safari/537.36
Переменная окружения: HTTP_USER_AGENT
Заголовок содержит информацию о клиенте, в частности о версии браузера и
операционной системе. Может предоставлять неточную информацию.
Д) Заголовок Referer
Referer: URL_link
Переменная окружения: HTTP_REFERER
Заголовок содержит URL-адрес, с которого был осуществлен переход.
Е) Content-length
Content-length: length
Переменная окружения: CONTENT_LENGTH
Заголовок содержит десятичное представление длины передаваемых
методом POST данных в байтах. При использовании метода GET заголовок
отсутствует.
Ё) Заголовок Cookie
Cookie: cookie_values
Переменная окружения: HTTP_COOKIE
Заголовок передает данные о cookies в URL-кодировке, относящихся к
данному веб-ресурсу.
Ж) Заголовок Accept

3
Лекции курса PHP7 + MySQL с нуля
(краткое содержание)

Accept: text/html, text/plain, image/gif


Переменная окружения: HTTP_ACCEPT
Заголовок содержит все типы файлов, воспринимаемых браузером. В
последнее время чаще всего указывается формат */*, определяющий любые типы
файлов.
Получить данные заголовков можно с помощью функции getenv(),
возвращающей значение указанной переменной окружения:
string getenv(string VARNAME)
Рассмотрим перечисленные переменные окружения в листинге 38.1.
Листинг 38.1. Переменные окружения

//Выводим данные с помощью сочетания конструкции echo и функции getenv()


echo "<p><b>Переменная окружения
REQUEST_METHOD:</b>".getenv('REQUEST_METHOD')."<p>";
echo "<p><b>Переменная окружения QUERY_STRING:
</b>".getenv('QUERY_STRING')."<p>";
echo "<p><b>Переменная окружения REQUEST_URI:
</b>".getenv('REQUEST_URI')."<p>";
echo "<p><b>Переменная окружения CONTENT_TYPE:
</b>".getenv('CONTENT_TYPE')."<p>";
echo "<p><b>Переменная окружения HTTP_HOST: </b>".getenv('HTTP_HOST')."<p>";
echo "<p><b>Переменная окружения HTTP_USER_AGENT:
</b>".getenv('HTTP_USER_AGENT')."<p>";
echo "<p><b>Переменная окружения HTTP_REFERER:
</b>".getenv('HTTP_REFERER')."<p>";
echo "<p><b>Переменная окружения CONTENT_LENGTH:
</b>".getenv('CONTENT_LENGTH')."<p>";
echo "<p><b>Переменная окружения HTTP_COOKIE:
</b>".getenv('HTTP_COOKIE')."<p>";
echo "<p><b>Переменная окружения HTTP_ACCEPT:
</b>".getenv('HTTP_ACCEPT')."<p>";

Стоит учитывать, что отображаемые данные могут зависеть от многих


факторов: имени сервера и хоста, используемого браузера и др.
Также стоит добавить, что выбор метода передачи данных зависит от задач,
выполняемых сценарием. Так, метод POST является более предпочтительным для
случаев, где необходим более высокий уровень защищенности данных, т. к. строка
запроса скрывается от взгляда пользователя и не может быть перехвачена
внешними способами. Один из случаев использования метода POST – передача
данных веб-форм, используемых для отправки писем, авторизации и пр.