Статьи Обзор протокола Http

Discussion in 'Статьи' started by bxN5, 10 Mar 2007.

  1. bxN5

    bxN5 Elder - Старейшина

    Joined:
    8 Jan 2006
    Messages:
    687
    Likes Received:
    138
    Reputations:
    32
    Hypertext Transfer Protocol (HTTP, протокол пересылки гипертекста) -
    это язык, которым клиенты и серверы World Wide Web пользуются для общения
    между собой. Он, по сути дела, является основой в Web.

    Хотя HTTP в большей степени относится к сфере программирования серверов
    и клиентов, знание этого протокола важно и для CGI-программирования. Кроме
    того, иногда HTTP фильтрует информацию и передает ее обратно пользователям
    - это происходит, например, когда в окне броузера отображаются коды ошибок
    сервера.
    Принципы работы HTTР
    Все HTTP-транзакции имеют один общий формат. Каждый запрос клиента и
    ответ сервера состоит из трех частей: строки запроса (ответа), раздела
    заголовка и тела. Клиент инициирует транзакцию следующим образом:

    1. Клиент устанавливает связь с сервером по назначенному номеру порта
    (по умолчанию - 80). Затем клиент посылает запрос документа, указав
    HTTP-команду, называемую методом, адрес документа и номер версии HTTP.
    Например, в запросе

    GET /index.html HTTP/1.0


    используется метод GET, которым с помощью версии 1.0 HTTP запрашивается
    документ index.html. Методы HTTP более подробно рассматриваются ниже.

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

    User-Agent: Mozilla/4.05 (WinNT; 1)

    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*


    Завершается заголовок пустой строкой.

    3. Послав запрос и заголовки, клиент может отправить и дополнительные
    данные. Эти данные используются главным образом теми CGI-программами,
    которые применяют метод POST. Клиенты (например, Netscape Navigator-Gold),
    также могут использовать их для помещения отредактированной страницы
    обратно на Web-сервер.

    Сервер отвечает на запрос клиента следующим образом:

    1. Первая часть ответа сервера - строка состояния, содержащая три поля:
    версию HTTP, код состояния и описание. Поле версии содержит номер версии
    HTTP, которой данный сервер пользуется для передачи ответа.

    Код состояния - это трехразрядное число, обозначающее результат
    обработки сервером запроса клиента. Описание, следующее за кодом
    состояния, представляет собой просто понятный для человека текст,
    поясняющий код состояния. Например, строка состояния

    НТТР/1.0 200 OK


    говорит о том, что сервер для ответа использует версию HTTP 1.0. Код
    состояния 200 означает, что запрос клиента был успешным и затребованные
    данные будут переданы после заголовков.

    2. После строки состояния сервер передает клиенту информацию заголовка,
    содержащую данные о самом сервере и затребованном документе. Ниже приведен
    пример заголовка:

    Date: Fri, 10 Jan 2004 07:34:28 GMT

    Server: Apache/2.2.6

    Last-modified: Mon, 12 Jun 2003 22:54:48 GMT

    Content-type: text/html

    Content-length: 2482


    Завершает заголовок пустая строка.

    3. Если запрос клиента успешен, то посылаются затребованные данные. Это
    может быть копия файла или результат выполнения CGI-программы. Если запрос
    клиента удовлетворить нельзя, передаются дополнительные данные в виде
    понятного для пользователя разъяснения причин, по которым сервер не смог
    выполнить данный запрос.

    В HTTP 1.0 за передачей сервером затребованных данных следует
    разъединение с клиентом, и транзакция считается завершенной, если не
    передан заголовок Connection: Keep Alive. В HTTP 1.1 сервер по умолчанию
    не разрывает соединение и клиент может посылать другие запросы. Поскольку
    во многие документы встроены другие документы - изображения, кадры,
    апплеты и т.д., это позволяет сэкономить время и затраты клиента, которому
    в противном случае пришлось бы для получения всего одной страницы
    многократно соединяться с одним и тем же сервером. Таким образом, в HTTP
    1.1 транзакция может циклически повторяться, пока клиент или сервер не
    закроет соединение явно.

    HTTP не сохраняет информацию по транзакциям, поэтому в следующей
    транзакции приходится начинать все заново. Преимущество состоит в том, что
    HTTP сервер может обслужить в заданный промежуток времени гораздо больше
    клиентов, ибо устраняются дополнительные расходы на отслеживание сеансов
    от одного соединения к другому. Есть и недостаток: для сохранения
    информации по транзакциям более сложные CGI-программы должны пользоваться
    скрытыми полями ввода или внешними средствами, например "ключиками"
    (cookies) Netscape.
    Запросы клиента
    Запросы клиента разбиваются на три раздела. Первая строка сообщения
    всегда содержит HTTP-команду, называемую методом, URI, который обозначает
    запрашиваемый клиентом файл или ресурс, и номер версии HTTP. Следующие
    строки запроса клиента содержат информацию заголовка. Информация заголовка
    содержит сведения о клиенте и информационном объекте, который он посылает
    серверу. Третья часть клиентского запроса представляет собой тело
    содержимого - собственно данные, посылаемые серверу.

    URI (Uniform Resource Identifier, универсальный идентификатор ресурса)
    - это общий термин для всех допустимых форматов схем адресации,
    поддерживаемых в World Wide Web. Сейчас общепринятой является схема
    адресации с использованием универсальных локаторов ресурсов (URL).

    Методы
    Метод - это HTTP-команда, с которой начинается первая строка запроса
    клиента. Метод сообщает серверу о цели запроса. Для HTTP определены три
    основных метода: GET, HEAD и POST. Определены и другие методы, но они не
    так широко поддерживаются серверами, как три перечисленных (хотя эти
    другие методы в будущем будут использоваться более часто). При задании
    имен методов учитывается регистр, поэтому GET и get
    различаются.
    Метод GET
    GET - это запрос информации, расположенной на сервере по указанному
    URL. GET - наиболее распространенный метод поиска с помощью броузеров
    документов для визуализации. Результат запроса GET может представлять
    собой, например, файл, доступный для сервера, результат выполнения
    программы или CGI-сценария, выходную информацию аппаратного устройства и
    т.д.

    Если клиент пользуется в своем запросе методом GET, сервер отвечает
    строкой состояния, заголовками и затребованными данными. Если сервер не
    может обработать запрос вследствие ошибки или отсутствия полномочий, он,
    как правило, посылает в информационном разделе ответа текстовое пояснение.

    Тело информационного содержимого запроса GET всегда пустое. GET в
    переводе на человеческий язык означает примерно следующее: "Дайте мне этот
    файл". Для идентификации указанных в запросе клиента файла или программы
    обычно используется полное имя этого объекта на сервере.

    Ниже приведен пример успешного запроса GET на получение файла. Клиент
    посылает запрос:

    GET /index.html HTTP/1.О

    Connection: Keep-Alive

    User-Agent: Mozilla/4.05 (WinNT; 1)

    Host: www.ora.com

    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*


    Сервер отвечает:

    HTTP/1.0 200 Document follows

    Date: Fri, 20 Jan 2004 08:17:58 GMT

    Server: Apache/1.2.6

    Last-modified: Mon, 20 Jun 2003 21:53:08 GMT

    Content-type: text/html

    Content-length: 2482

    (далее следует тело документа)


    Метод GET используется также для передачи входной информации в CGI-про-
    граммы посредством тегов форм. Поскольку тело запроса GET пусто, входные
    данные присоединяются к URL в строке GET запроса. Если в теге <form>
    задано значение атрибута method="GET", то пары ключ-значение,
    представляющие собой введенные данные из формы, присоединяются к URL после
    вопросительного знака. Пары отделяются друг от друга амперсандом (&).
    Например, по запросу

    GET /cgi-bin/birthday.pl?month=august&date=24 HTTP/1.О


    сервер передаст в CGI-программу birthday.pl значения month и date,
    указанные в форме, созданной на клиенте. Входные данные в конце URL
    кодируются в спецификации CGI. Чтобы специальные символы
    интерпретировались обычным образом, используются их шестнадцатиричные
    коды.

    Аналогичным образом в методе GET может передаваться информация о
    дополнительных путях. При этом дополнительный путь указывается после URL,
    т.е. /cgi-bin/display.pl/cgi/cgi_doc.txt. Сервер определяет, где
    заканчивается имя программы (display.pl). Все данные, которые следуют за
    именем программы, интерпретируются как дополнительный
    путь.
    Метод HEAD
    етод HEAD аналогичен методу GET, за исключением того, что сервер
    ничего не посылает в информационной части ответа. Метод HEAD запрашивает
    только информацию заголовка о файле или ресурсе. Информация заголовка
    запроса HEAD должна быть такой же, как в запросе GET.

    Этот метод используется, когда клиент хочет найти информацию о
    документе, не получая его. Для метода HEAD существует множество
    приложений. Например, клиент может затребовать следующую информацию:


    *
    время изменения документа (эти данные полезны для запросов,
    связанных с кэш-памятью);

    *

    размер документа (необходим для компоновки страницы, оценки времени
    передачи, определения необходимости запроса более компактной версии
    документа);

    *

    тип документа (позволяет клиенту изучать документы только
    определенного типа);

    *

    тип сервера (позволяет создавать специализированные запросы).


    Следует отметить, что большая часть информации заголовка, которую
    посылает сервер, не является обязательной и может предоставляться не всеми
    серверами. Рекомендуемый вариант для Web-клиентов - учитывать гибкость
    ответов сервера и предусматривать определенные меры по умолчанию, если
    сервер не передал необходимую информацию заголовка.

    Ниже приведен пример HTTP-транзакции с использованием запроса HEAD.
    Клиент посылает запрос:

    HEAD /index.html HTTP/1.0

    Connection: Close

    User-Agent: Mozilla/4.05 (WinNT; 1)

    Host: www.ora.com

    Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*

    Сервер отвечает:

    HTTP/1.0 200 Document follows

    Date: Fri, 20 Jan 1998 08:17:58 GMT

    Server: Apache/1.2.6

    Last-modified: Mon, 17 Jun 1996 21:53:08 GMT

    Content-type: text/html

    Content-length: 2482

    (Тело содержимого в ответе на запрос HEAD не передается.)
    Метод POST
    Метод POST позволяет посылать на сервер данные в запросе клиента. Эти
    данные направляются в программу обработки данных, к которой сервер имеет
    доступ (например, в CGI-сценарий). Метод POST может использоваться во
    многих приложениях. Например, его можно применять для передачи входных
    данных для:


    * сетевых служб (таких как телеконференции);
    * программ с интерфейсом в виде командной строки;
    * аннотирования документов на сервере;
    * выполнения операций в базах данных.


    Данные, посылаемые на сервер, находятся в теле содержимого запроса
    клиента. По завершении обработки запроса POST и заголовков сервер передает
    тело содержимого в программу, заданную URL. В качестве схемы кодирования с
    методом POST используется URL-кодирование, которое позволяет
    преобразовывать данные форм в список переменных и значений для
    CGI-обработки.

    Ниже приведен небольшой пример запроса клиента с использованием метода
    POST. Клиент посылает на сервер данные о дне рождения, введенные в форму:

    POST /cgi-bin/birthday.pl HTTP/1.0

    User-Agent; Mozilla/4.05 (WinNT; 1)

    Accept: image/gif, iinage/x-xbj.tmap, image/jpeg, J.mage/pjpeg, */*

    Host: www.ora.com

    Content-type: application/x-www-form-ur.lencoded

    Content-Length: 20

    nionth=august&date=24

    Другие методы

    Приведенные ниже методы также определены, хотя и используются не столь
    часто:

    LINK Связывает информацию заголовка с документом на сервере.

    UNLINK Отменяет связь информации заголовка с документом на
    сервере.

    PUT Помещает тело содержимого запроса по указанному URI.

    DELETE Удаляет данные, находящиеся на сервере по заданному URI.

    OPTIONSЗапрашивает информацию о коммуникационных параметрах
    сервера. Чтобы запросить данные обо всем сервере в целом, вместо URI
    запроса следует использовать символ *.

    TRACE Требует, чтобы тело содержимого запроса было возвращено
    без изменений. Используется для отладки.
    Ответы сервера

    Ответ сервера на запрос клиента состоит из трех частей. Первая строка -
    это строка ответа сервера, которая содержит номер версии HTTP, число,
    обозначающее состояние запроса, и краткое описание состояния. После строки
    ответа следует информация заголовка и тело содержимого, если таковое
    имеется.
    Коды ответов HTTP сервера

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

    Коды состояний обычно генерируются Web-серверами, но иногда это могут
    делать и CGI-сценарии, CGI-сценарии генерируют собственные заголовки
    вместо тех, которые должен выдавать сервер.
    Взято с _hostmake.ru (с)_http://itunion.ru
     
  2. Underwit

    Underwit Banned

    Joined:
    6 Oct 2006
    Messages:
    191
    Likes Received:
    137
    Reputations:
    16
    Да для новичков сойдет (для меня тоже :cool:). А если уж углубленно разбираться то лучше прочитать Rfc (номер не помню)
     
  3. A110ut

    A110ut Elder - Старейшина

    Joined:
    31 Dec 2005
    Messages:
    505
    Likes Received:
    263
    Reputations:
    92
    мда.. давайте еще опишим irc или ftp. не вижу смысла в подобной писанине(копипасте?)
    зы: rtFm