http

Работа с протоколом HTTP (часть 1)

Как общаются между собой клиент (браузер) и сервер? С помощью HTTP — hypertext transfer protocol. Когда мы что-то вбиваем в браузер, устанавливается соединение между клиентом и сервером. Клиент посылает запрос, а сервер в это же соединение посылает ответ. Т.к. серверов и клиентов много, они должны общаться на одном языке. Все это описано в спецификации протокола HTTP.

http протокол

Итак, браузер послал запрос. Запрос состоит из двух частей:

  • Строка запроса.
GET /folder/index.php HTTP/1.1

Сначала указывается метод запроса GET. Т.е. идет передача данных через адресную строку браузера. Потом указывается запрашиваемый ресурс (указывается от корня сайта). Потом идет версия прокола HTTP, которой придерживается браузер (версия 1.1). Признак конца строки (запроса) — знак возврат каретки и перевод на новую строку (/r/n).

  • HTTP заголовки запроса (мета-информация) основные:
Host: www.phpmove.ru — передача доменного имени
Accept: */*
Accept-Language: ru
Referer: http://yandex.ru/yandsearch?text=Rehc
User-Agent: Mozilla 7.0 (compatible; MSIE 6.1,...)

В конце каждого заголовка также идут служебные символы /r/n. Часть из этих заголовков предназначены серверу, часть — серверным разработчикам. Заголовок host обязательный, остальные — нет. Если host не указать, сервер отклонит запрос, вернув ‘статус 400’ (ничего не понял).

Соединение открывается с ip-адреса на ip-адрес. Есть браузер. Есть сервер, на нем лежат сайты. Когда сайтов было мало, а ip-адресов — много, у каждого сайта был свой ip-адрес. Когда устанавливалось соединение с сервером по конкретному адресу (ip-адрес => ip-адрес), все было понятно. Не нужен был заголовок host. Со временем число сайтов увеличилось, ip-адреса стали в дефиците. Хостеры просто так ip-адреса сейчас не раздают (ip4 — только за отдельную плату, ip6 — можно достать). И в реальности несколько сайтов вешают на один ip-адрес. Поэтому и появился обязательный заголовок host, чтобы различать сайты.

Остальные заголовки серверу безразличны. Но есть стандартные заголовки, которые передают все браузеры без исключения (user-agent, referer и многие другие). Все необязательные заголовки зависят от разработчиков, которые решили их впихнуть в браузер. В самом конце браузер передает пустую строку (/r/n/r/n) — признак конца запроса.

Сервер принимает все заголовки. И под каждый создает свою серверную переменную (http_host, http_accept, http_user_agent и другие).

http протокол




Добавить комментарий

Ваш e-mail не будет опубликован.