Журнал о Мире высоких технологий
Веб-мастеру4-09-2010, 19:06
HTTP (HYPERTEXT Transfer Protocol - протокол передачи гипертекста) был разработан как основа World Wide Web.

Работа по протоколу HTTP случается так: софтина-клиент устанавливает TCP-соединение с сервером (стандартный номер порта-80) и выдает ему HTTP-запрос. Сервак обрабатывает этот запрос и выдает HTTP-ответ клиенту.

Структура HTTP-запроса
HTTP-запрос состоит из заголовка запроса и тела запроса, разделенных пустой строкой. Тело запроса может отсутствовать.

Заголовок запроса состоит из морде (I-ой) строки запроса и дальнейших строк, уточняющих запрос в морде строке. Последующие строки к тому же могут отсутствовать.

Запрос в морде строке состоит из 3-х частей, разделенных пробелами:

Способ (к тому же, команда HTTP):
GET - запрос документа. Чаще всего употребляемый способ; в HTTP/.9, говорят, он был единственным.
HEAD - запрос заголовка документа. Отличается от GET тем, что выдается лишь заголовок запроса с информацией о документе. Сам документ не выдается.
POST - этот способ применяется для передачи данных CGI-скриптам. Сами данные следуют в дальнейших строках запроса в виде параметров.
PUT - расположить документ на сервере. Насколько я знаю, применяется нечасто. Запрос с этим методом имеет тело, в коем передается сам документ.
Ресурс - путь к определенному файлу на сервере, который клиент желает получить (или расположить - для способа PUT). Если ресурс - просто какой-нибудь файл для считывания, сервак должен по этому запросу выдать его в теле ответа. Если же это путь к какому-или CGI-скрипту, то сервак запускает скрипт и возвращает результат его исполнения. К слову, благодаря подобный унификации ресурсов для клиента почти безразлично, что он представляет собою на сервере.
Версия протокола - версия протокола HTTP, с которой работает клиентская софтина.
Так, простейший HTTP-запрос может выглядеть так:
GET / HTTP/1.
Тут запрашивается корневой файл из корневой директории web-сервера.

Строки после морде строки запроса имеют следующий формат:

Параметр: значениe.
Так задаются характеристики запроса. Это является необязательным, все строки после морде строки запроса могут отсутствовать; в этом случае сервак принимает их значение изначально или по результатам прошлого запроса (при работе в режиме Keep-Alive).

Перечислю кое-какие максимально употребительные характеристики HTTP-запроса:

Connection (соединение)- может принимать значения Keep-Alive и close. Keep-Alive ("оставить в живых") обозначает, что после выдачи данного документа соединение с сервером не разрывается, и возможно выдавать еще запросы. Больше всего браузеров работают именно в режиме Keep-Alive, так как он дает возможность за одно соединение с сервером "скачать" html-страницу и рисунки к ней. Будучи как-то раз установленным, режим Keep-Alive сохраняется до I-ой ошибки или до явного указания в очередном запросе Connection: close.

User-Agent - значением является "кодовое обозначение" браузера, к примеру: Мазила/4. (compatible; MSIE 5.; Винда 95; DIGEXT)

Accept - перечень поддерживаемых браузером типов содержимого в порядке их предпочтения данным браузером, к примеру для IE5:

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */*

Это, понятно, необходимо для случая, когда сервак может выдавать 1 и тот же документ в различных форматах.

Значение этого параметра применяется в основном CGI-скриптами для образования ответа, адаптированного для данного браузера.

Referer - УРЛ, с которого перешли на этот ресурс.

Host - имя хоста, с которого запрашивается ресурс. Полезно, если на сервере есть несколько виртуальных серверов под одним АЙПИ-адресом. В этом случае имя виртуального сервера определяется по этому полю.

Accept-Language - поддерживаемый язык. Имеет значение для сервера, который может выдавать 1 и тот же документ в различных языковых версиях.

Формат HTTP-ответа
Формат ответа весьма похож на формат запроса: он к тому же имеет заголовок и тело, разделенное пустой строкой.

Заголовок к тому же состоит из основной строки и строк параметров, однако формат основной строки отличается от таковой в заголовке запроса.

Главная строка запроса состоит из 3-х полей, разделенных пробелами:

Версия протокола - аналогичен соответствующему параметру запроса.
Код ошибки - кодовое обозначение "успешности" исполнения запроса. Код 200 обозначает "все нормально" (OK).
Словесное описание ошибки - "расшифровка" прошлого кода. К примеру для 200 это OK, для 500 - Internal Server Error.
Максимально употребительные характеристики http-ответа:
Connection - аналогичен соответствующему параметру запроса. Если сервак не поддерживает Keep-Alive (есть и подобные), то значение Connection в ответе постоянно close.

Content-Type ("тип содержимого") - содержит обозначение типа содержимого ответа. В зависимости от значения Content-Type броузер воспринимает ответ как HTML-страницу, картинку gif или jpeg, как файл, который нужно сохранить на диске, или как нечто еще и предпринимает соответствующие действия. Значение Content-Type для браузера аналогично значению расширения файла для Винда.

Кое-какие типы содержимого:

text/html - текст в формате HTML (страница);
text/plain - простой текст (аналогичен "блокнотовскому");
image/jpeg - картинка в формате JPEG;
image/gif - то же, в формате GIF;
application/octet-stream - поток "октетов" (т.е. просто байт) для записи на диск.
В действительности типов содержимого намного более.
Content-Length ("длина содержимого") - длина содержимого ответа в байтах.

Last-Modified ("Модифицирован в последний раз") - дата последнего перемены документа.

Теги
Информация
Комментировать статьи на нашем сайте возможно только в течении 5 дней со дня публикации.