Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
rusldv
8 лет назад

PHP - Запросы от браузера к серверу

PHP - Урок 2 (Запросы от браузера к серверу)



Чего тебе надобно, старче

Самой популярной программой для работы с WEB является браузер. Он обращается к серверу по протоколу TCP/IP и отправляет специально отформатированный запрос, который затем сервер разбирает на части, и узнает чего-же нужно отправить в ответ клиентской программе.

Теперь разберем как выглядит такой запрос. Для общения с сервером клиент использует протокол HTTP - это протокол уровня приложений. Как бы еще одна матрешка, вложенная в TCP. Запрос как и у TCP (да и если вы читали мой курс про сети, уже догадались - все остальные уровни сетевой модели) содержит заголовки и собственно данные. Однако теперь заголовки нужны уже непосредственно самим программам, которые взаимодействуют в интернете. (у TCP как мы помним, заголовки использовались для установки соединения самой подсистемой TCP, которая является обычно частью операционной системы, а заголовки IP по большей части используются маршрутизаторами).

У протокола HTTP есть набор методов, которые сообщают серверу, какое действие хочет от него клиент (GET - что то получить, POST-что-то передать и получить. Есть еще другие HEAD, PUT, DELETE - получение только заголовка ответа, что-то записать и удаление чего-либо, однако они используются редко, хотя они используются редко. Да могут быть и другие, например OPTIONS и т.д Однако все зависит от реализации сервера, например CouchDB использует их для работы с данными.)

Итак рассмотрим пример. Пользователь вводит адрес в адресную строку и нажимает ENTER (или кликает по ссылке - что для браузера равнозначно). В результате чего браузер получает событие, говорящее что нужно сформировать и отправить запрос к серверу. А также получает саму ссылку. Допустим это будет http://thesite.ru/test/page.html.
Браузер формирует следующий запрос имеющей следующую структуру

МЕТОД ПУТЬ_К_ФАЙЛУ_НА_СЕРВЕРЕ ВЕРСИЯ_ПРОТОКОЛА_HTTP
ЗАГОЛОВКИ
ПУСТАЯ СТРОКА
ДАННЫЕ ПЕРЕДАВАЕМЫЕ НА СЕРВЕР (Если есть)

Например

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
(пустая строка)  

Как вы видите браузер преобразовал запрос на несколько частей. А также добавил дополнительные заголовки. Разберем по-порядку:

  1. GET /test/page.html HTTP1.1 В самом начале название метода - буквально переводится как (ПОЛУЧИТЬ или просто ДАЙ), затем идет путь к файлу, который в самом простом случае отмеряется от папки с сайтом (об этом мы еще поговорим). Затем идет версия протокола - чтобы сервер не забыл в каком формате ему отвечать (ну а вдруг понадобится HTTP2.0).
  2. Затем идет перечисление заголовков. Очень важный заголовок Host: thesite.ru - он указывает доменное имя сайта - в нашем случае это thesite.ru. По нему DNS сервер будет определять IP куда следует направить запрос, а также по прибытию на нужный сервер, он может обслуживать много сайтов, с разными доменами (виртуальных хостов (в apache) или как иногда их называют сервер-блоков (в nginx). По имени хоста сервер как раз и отличает какой сайт запрашивает клиент (IP-то одинаковый у сервера). Об этом мы также вскоре поговорим.
    Другие заголовки несут вспомогательный характер, например могут содержать название и версию браузера User-Agent, тип файла, который ожидает в ответ клиент Accept: text/html и многое другое.
  3. Затем идет пустая строка, чтобы указать серверу, что заголовки закончились и далее могут быть любые данные, например логин и пароль, а могут и не быть.

Затем это все передается от уровня приложений (нашего браузера) транспортному уровню.
Затем для PHP - программиста вполне можно считать, что этот запрос передается на сервер.
Если же вам интересно его путешествие полностью, то читайте мои статьи про сети

Физический уровень модели OSI


Канальный уровень модели OSI


Маршрутизаторы


Сетевой уровень OSI и Интернет


IP часть 1


IP часть 2


Транспортный уровень модели OSI. Сокеты, UDP и TCP


В следующих уроках поговорим про сервер и его ответы, а также интерпретатор PHP.
106
87.131 GOLOS
На Golos с November 2016
Комментарии (2)
Сортировать по:
Сначала старые