![](data:image/jpeg;base64,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)
HTTP (HyperText Transfer Protocol - протокол передачи гипертекста) был разработан как основа World Wide Web. Работа по протоколу HTTP происходит следующим образом: программа-клиент устанавливает TCP-соединение с сервером (стандартный номер порта-80) и выдает ему HTTP-запрос. Сервер обрабатывает этот запрос и выдает HTTP-ответ клиенту.
Структура HTTP-запроса HTTP-запрос состоит из заголовка запроса и тела запроса, разделенных пустой строкой. Тело запроса может отсутствовать. Заголовок запроса состоит из главной (первой) строки запроса и последующих строк, уточняющих запрос в главной строке. Последующие строки также могут отсутствовать. Запрос в главной строке состоит из трех частей, разделенных пробелами: Метод (иначе говоря, команда HTTP): GET - запрос документа. Наиболее часто употребляемый метод; в HTTP/0.9, говорят, он был единственным. HEAD - запрос заголовка документа. Отличается от GET тем, что выдается только заголовок запроса с информацией о документе. Сам документ не выдается. POST - этот метод применяется для передачи данных CGI-скриптам. Сами данные следуют в последующих строках запроса в виде параметров. PUT - разместить документ на сервере. Насколько я знаю, используется редко. Запрос с этим методом имеет тело, в котором передается сам документ. Ресурс - это путь к определенному файлу на сервере, который клиент хочет получить (или разместить - для метода PUT). Если ресурс - просто какой-либо файл для считывания, сервер должен по этому запросу выдать его в теле ответа. Если же это путь к какому-либо CGI-скрипту, то сервер запускает скрипт и возвращает результат его выполнения. Кстати, благодаря такой унификации ресурсов для клиента практически безразлично, что он представляет собой на сервере. Версия протокола-версия протокола HTTP, с которой работает клиентская программа. Таким образом, простейший HTTP-запрос может выглядеть следующим образом: GET / HTTP/1.0 Здесь запрашивается корневой файл из корневой директории web-сервера. Строки после главной строки запроса имеют следующий формат: Параметр: значениe. Таким образом задаются параметры запроса. Это является необязательным, все строки после главной строки запроса могут отсутствовать; в этом случае сервер принимает их значение по умолчанию или по результатам предыдущего запроса (при работе в режиме Keep-Alive). Перечислю некоторые наиболее употребительные параметры HTTP-запроса: Connection (соединение)- может принимать значения Keep-Alive и close. Keep-Alive ("оставить в живых") означает, что после выдачи данного документа соединение с сервером не разрывается, и можно выдавать еще запросы. Большинство браузеров работают именно в режиме Keep-Alive, так как он позволяет за одно соединение с сервером "скачать" html-страницу и рисунки к ней. Будучи однажды установленным, режим Keep-Alive сохраняется до первой ошибки или до явного указания в очередном запросе Connection: close. close ("закрыть") - соединение закрывается после ответа на данный запрос. User-Agent - значением является "кодовое обозначение" браузера, например: Mozilla/4.0 (compatible; MSIE 5.0; Windows 95; DigExt) Accept - список поддерживаемых браузером типов содержимого в порядке их предпочтения данным браузером, например для моего IE: Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/vnd.ms-powerpoint, */* Это, очевидно, нужно для случая, когда сервер может выдавать один и тот же документ в разных форматах. Значение этого параметра используется в основном CGI-скриптами для формирования ответа, адаптированного для данного браузера. Referer - URL, с которого перешли на этот ресурс. Host - имя хоста, с которого запрашивается ресурс. Полезно, если на сервере имеется несколько виртуальных серверов под одним IP-адресом. В этом случае имя виртуального сервера определяется по этому полю. Accept-Language - поддерживаемый язык. Имеет значение для сервера, который может выдавать один и тот же документ в разных языковых версиях.
Формат HTTP-ответа Формат ответа очень похож на формат запроса: он также имеет заголовок и тело, разделенное пустой строкой. Заголовок также состоит из основной строки и строк параметров, но формат основной строки отличается от таковой в заголовке запроса. Основная строка запроса состоит из 3-х полей, разделенных пробелами: Версия протокола - аналогичен соответствующему параметру запроса. Код ошибки - кодовое обозначение "успешности" выполнения запроса. Код 200 означает "все нормально" (OK). Словесное описание ошибки - "расшифровка" предыдущего кода. Например для 200 это OK, для 500 - Internal Server Error. Наиболее употребительные параметры http-ответа: Connection - аналогичен соответствующему параметру запроса. Если сервер не поддерживает Keep-Alive (есть и такие), то значение Connection в ответе всегда close.
Поэтому, на мой взгляд, правильной тактикой браузера является следующая: 1. выдать в запросе Connection: Keep-Alive; 2. о состоянии соединения судить по полю Connection в ответе. Content-Type ("тип содержимого") - содержит обозначение типа содержимого ответа. В зависимости от значения Content-Type браузер воспринимает ответ как HTML-страницу, картинку gif или jpeg, как файл, который надо сохранить на диске, или как что-либо еще и предпринимает соответствующие действия. Значение Content-Type для браузера аналогично значению расширения файла для Windows. Некоторые типы содержимого: text/html - текст в формате HTML (веб-страница); text/plain - простой текст (аналогичен "блокнотовскому"); image/jpeg - картинка в формате JPEG; image/gif - то же, в формате GIF; application/octet-stream - поток "октетов" (т.е. просто байт) для записи на диск. На самом деле типов содержимого гораздо больше. Content-Length ("длина содержимого") - длина содержимого ответа в байтах. Last-Modified ("Модифицирован в последний раз") - дата последнего изменения документа. |