Http

Сетевые службы и основные протоколы TCP/IP уровня приложений

⇐ Предыдущая1234Следующая ⇒

Модель “Клиент/Сервер”

“Клиент/Сервер” — это модель взаимодействия, в которой компьютеры сети являются либо клиентами, либо серверами. Клиентами являются запрашивающие компьютеры, а сервером — компьютер, который обрабатывает запросы клиентов и отвечает на них.

Следует иметь в виду, что термины “клиент” и “сервер” могут применяться не только к физическим устройствам. Модель “Клиент/Сервер” применима и к программному обеспечению (ПО), когда серверная часть распределенного ПО обслуживает запросы нескольких его клиентских частей.

Сетевые службы, порты, протоколы и сокеты

ПО, обеспечивающее обмен информацией между приложениями и основанное на модели “Клиент/Сервер” в TCP/IP сетях называют сетевыми службами или сервисами.

Для взаимодействия приложений в TCP/IP сетях совместно с протоколами используются сокеты. Сокет включает в себя IP-адрес и номер порта (числовой идентификатор выполняющегося на компьютере сетевого приложения).

На основе централизованной стандартизации все сетевые службы связаны с уникальными номерами портов, а номера портов — с протоколами. Это позволяет автоматически определять, какая из выполняющихся на одном хосте сетевых программ должна обрабатывать поступающие на определенный порт данные. За присвоение номеров портов сетевым службам отвечает некоммерческая организация, администрирующая адресное пространство и параметры протоколов сети Интернет.

Первоначально серверная часть сетевой службы создает так называемый “слушающий” серверный сокет, обеспечивая тем самым возможность клиентским частям службы обращаться к данному сервису. После чего клиентские части могут посылать запросы на открытие клиентских сокетов с указанием IP-адреса сервера и порта сервиса, т.е. на создание соединения для сетевого взаимодействия. Когда это происходит, то для осуществления взаимодействия с обнаруженным клиентом сервер автоматически создает новый сокет, а по старому — продолжает “слушать” запросы на установление новых соединений. Таким образом, один сервер может одновременно “общаться” с несколькими клиентами.

Назначение IP-адресов хостам и протокол DHCP

Многие пользователи не обладают достаточными знаниями для того, чтобы настроить свои компьютеры для работы в сети и должны, поэтому полагаться на сетевых администраторов. Однако назначение IP-адресов администратором сети многим компьютерам представляет собой довольно утомительную процедуру. Для того чтобы освободить администратора от этих проблем используется протокол DHCP (Dynamic Host Configuration Protocol), позволяющий компьютерам автоматически получать IP-адрес и другие параметры, необходимые для работы в сети TCP/IP.

Этот протокол уровня приложений, используя порты 67 и 68, обеспечивает надежный и простой способ конфигурирования сети, гарантируя отсутствие конфликтов IP-адресов за счет их назначения DHCP-сервером. При включении компьютер-клиент сам обращается к DHCP-серверу, и получает от него нужные параметры, что позволяет автоматизировать настройку и уменьшает количество ошибок администрирования.

Протокол DHCP предоставляет три способа назначения IP-адресов: “ручное”, “автоматическое” и “динамическое”.

В “ручном” способе администратор размещает на DHCP-сервере информацию о соответствии IP-адресов физическим MAC-адресам клиентов.

Эти IP-адреса пересылаются компьютерам-клиентам в ответ на их запросы к DHCP-серверу.

При “автоматическом” способе DHCP-сервер назначает IP-адрес (и, возможно, другие параметры конфигурации клиента) из пула наличных IP-адресов без вмешательства человека. Границы пула назначаемых адресов задает администратор при конфигурировании DHCP-сервера. Между идентификатором клиента и его IP-адресом по-прежнему, как и при ручном назначении, существует постоянное соответствие.

Оно устанавливается в момент первичного назначения сервером IP-адреса клиенту. При всех последующих запросах сервер возвращает тот же самый IP-адрес.

При “динамическом” способе назначения сервер выдает IP-адрес клиенту на ограниченное время (называемое "сроком аренды"), по истечении которого адрес вновь считается свободным, а клиент обязан запросить новый. Освободившийся адрес может быть предоставлен любому клиенту, в т.ч. и тому, который его ранее использовал. Такое динамическое назначение адресов позволяет строить IP-сеть, количество узлов в которой, намного превышает количество имеющихся в распоряжении администратора IP-адресов.

Примером работы протокола DHCP может служить ситуация, когда компьютер, являющийся клиентом, удаляется из подсети. При этом назначенный ему IP-адрес автоматически освобождается. Когда компьютер подключается к другой подсети, то ему автоматически назначается новый адрес. Ни пользователь, ни сетевой администратор не вмешиваются в этот процесс. Это свойство очень важно для мобильных пользователей в беспроводных сетях, использующих технологии WiFi или Bluetooth.

Отображение символьных имен на числовые IP-адреса: служба DNS

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

Эта база данных поддерживается с помощью иерархии территориально распределенных DNS-серверов, взаимодействующих по одноименному протоколу уровня приложений с использованием порта 53.

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

Протокол передачи гипертекста HTTP

HTTP (Hipertext Transfer Protocol) – используется для передачи по сети Интернет различных компонентов веб-сайтов (текст, графика, мультимедиа) в виде гипертекста. Кроме того данный протокол уровня приложений обеспечивает возможность обрабатывать ссылки на другие веб-страницы.

Браузеры (Internet Explorer, Safari, Opera, FireFox и др.) — являются HTTP клиентами, которые направляют запросы к HTTP-серверу (веб-серверу) и отображают содержание полученных от него веб-страниц. Веб-сервера (Apache или веб-сервер из набора IIS корпорации Microsoft) ожидают поступления HTTP запросов, а затем выполняют поиск и отправку клиентам связанных с этими запросами страниц. Протокол HTTP использует порт 80.

Отметим, что протокол HTTP используется в качестве “транспорта” и для других протоколов прикладного уровня, например, в протоколах для обмена произвольными сообщениями в формате XML.

Протокол передачи файлов FTP

FTP (File Transfer Protocol) — это протокол, обеспечивающий в стеке протоколов TCP/IP простой способ обмена файлами между компьютерами. Как и HTTP он осуществляет передачу веб-страниц и связанных с ними файлов. С помощью этого протокола уровня приложений пользователь может (имея соответствующие полномочия) размещать, удалять, переименовывать, перемещать и копировать файлы, хранящиеся на FTP-серверах.

FTP может использоваться как через интерфейс командной строки, так и через графический интерфейс. Все основные веб-браузеры способны делать FTP запросы. Протокол FTP использует порт 20.

Протокол удаленного терминального доступа Telnet

Протокол уровня приложений Telnet – обеспечивает удаленный доступ пользователей к компьютерам сети в режиме виртуального текстового терминала. По умолчанию Telnet-клиент использует порт 23.

Кроме того, этот протокол может служить и средством выявления сетевых неисправностей, а также использоваться для тестирования других сетевых служб на удаленных компьютерах. Основными реализациями Telnet-клиента являются программы telnet и PuTTy.

Простой протокол электронной почты SMTP

SMTP (Simple Mail Transfer Protocol) и его расширения — это часть стека протоколов TCP/IP предназначена для отправки и получения с помощью сети электронной почты. SMTP чаще всего применяется вместе с протоколами доступа к сообщениям: POP3 (Post Office Protocol v3) или IMAP (Internet Message Access Protocol).

Использование SMTP, POP3 и IMAP позволяет хранить электронную почту в почтовом ящике на сервере, и загружать ее на клиентский компьютер лишь по мере надобности. Протокол SMTP применяется чаще для отправки почты, а POP3 и IMAP – для ее получения. Почтовые программы (Outlook Express, The Bat и др.) позволяют определить как SMTP-сервер, так и POP3-сервер. Протокол SMTP использует порт 25.


⇐ Предыдущая1234Следующая ⇒


Дата добавления: 2016-11-02; просмотров: 397 | Нарушение авторских прав


Похожая информация:


Поиск на сайте:


Формат 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 («Модифицирован в последний раз») — дата последнего изменения документа.

Понимание, что такое протокол HTTP и как он работает очень важная задача для любого веб-мастера.

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

В этой заметке давайте разберемся с самыми основами: что же такое протокол HTTP и зачем он нужен.

Итак, первое, что нужно понимать, протокол HTTP – это всего лишь один, из множества протоколов (почитайте об этом здесь), которыми можно пользоваться в сети Интернет. У него есть собственные цели и задачи.

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

Когда вы заходите в браузер, не важно, какой именно браузер у вас установлен, и вводите в адресную строку адрес к сайту, то браузер автоматически прибавляет к адресу приставку «http://». Единственное, эта приставка может быть по умолчанию скрыта, но если скопировать адрес и вставить его в другое место, то ее без труда можно будет увидеть.

Эта приставка обозначает, что вы будете обращаться к ресурсу по протоколу HTTP.

Основная задача протокола HTTP – это прием и передача гипертекстовых документов. Т.е. тех веб-страниц, которые мы просматриваем в браузере.

Сторона, которая принимает содержимое веб-страниц — браузер (еще его называют клиентом), а сторона, которая отдает содержимое веб-страниц — сервер.

Технологию, по которой происходит этот обмен, называют «клиент-серверной» технологией.

По сути, протокол HTTP – это инструмент, с помощью которого можно передавать веб-странички в сети Интернет. А, что собой представляет веб-страница, которую мы получаем в ответе сервера? На самом деле это обычный HTML-код , который получает браузер и соответствующим образом его интерпретирует.

Принцип работы протокола HTTP

Работает это следующим образом.

1 этап. Клиент (браузер) отправляют строку запроса (HTTP-запрос), которая создается по определенным правилам, и запрашивает нужную веб-страничку на сервере.

2 этап. Сервер принимает запрос и ищет у себя эту веб-страницу. По результатам этого поиска создается ответ клиенту (HTTP-ответ). Этот ответ тоже оформляется по определенным правилам.

Если все прошло успешно и страница найдена, то в этом ответе будет передан код нужной веб-страницы + дополнительная служебная информация.

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

В общих чертах, это основа работы протокола HTTP. Всегда нужно держать в голове эту картину и тогда остальные тонкости, что именно передается в запросах и ответах, станет намного понятнее.

Если вы знаете английский, то вы можете почитать стандрат протокола HTTP 1.1 в оригинале.

http://tools.ietf.org/html/rfc2616

Кроме того, есть перевод этого стандарта на русский язык здесь:

http://www.lib.ru/WEBMASTER/rfc2068/

Вот несколько книг, которые могут быть полезны:

Немного про HTTP-протокол

Протокол HTTP вот уже на протяжении 17 лет является самым используемым протоколом в сети интернет. Почему? Всё тривиально — он простой, быстрый и достаточно надёжный, а самое главное гибкий. Основной его задачей является запрос данных с веб-сервера, в основном это сайты.

Построен он по принципу «клиент-сервер», то есть клиент (браузер) посылает запросы на сервер (apache, nginx, ligthttp) и в случае успешного соединения, в ответ на запрос, сервер отправляет клиенту информацию.

Под «информацией», в случает с HTTP, можно понимать практически всё что угодно. Связано это с упомянутой «гибкостью»: протокол способен передавать потоковый звук и видео, или же может выступать в виде транспорта для других протоколов.

Теперь рассмотрим как именно происходит коммуникация между клиентом и сервером. Мы уже определили что клиент посылает запрос, который состоит из 3-х частей:

  1. Стартовая строка — в ней указывается тип сообщения.
  2. Заголовки — описывают тело сообщения, определяя его параметры.
  3. Тело сообщения — само сообщение, должно отделяться пустой строкой.

Начиная с версии протокола 1.0 стартовая строка является обязательной, а другие элементы необязательными.

Для запроса и ответа стартовые строки разные. Стартовая строка запроса выглядит вот так:

метод URI HTTP/версия

Где

  • метод — это метод запроса.
  • URI — это адрес к запрашиваемому ресурсу (документ, файл, скрипт, и т.д).
  • версия — это версия протокола (правда тут есть тонкость, о них будет ниже).

Остановимся более подробно на методах.

Методы HTTP

Методы в HTTP это своего рода инструкции, передаваемые в сообщении серверу. Синтаксически — это специально-зарезервированное слово на английском языке. Особое внимание нужно обратить на регистр: метод пишется всегда в верхнем регистре.

Будем рассматривать методы по степени их популярности:

GET

Пожалуй самый важный метод. Он используется для запроса данных с ресурса, если эти данные имеют URL. Так же с помощью этого метода начинаются какие либо действия. Метод GET относится к числу идемпотентных для сервера, это значит, что многократное выполнение одного и того же запроса не будет приводить к разным результатам.

Клиент может передавать параметры запроса в самом URI, после символа «?»:

GET /path/resource?param1=value1&param2=value2 HTTP/1.1

POST

Метод POST занимается отправкой данных, находящихся в теле сообщения, на сервер. Также часто используется для отправки информации из веб-форм и файлов. Простейший пример — написание поста на форуме или комментария в соцсети. После того, как вы написали ваше сообщение, браузер формирует POST-запрос и в его тело помещает ваше сообщение,а затем отправляет его на сервер.

Метод POST для сервера виден как неидемпотентный, и выполнение одного и того же запроса может приводить к разным ответам.

Помимо всего прочего, этот метод часто используют вместо метода GET в связи с ограничением кол-ва знаков в URL у оного, или если используется специфичная кодировка.

HEAD

Данный метод похож на метод GET, но имеет более простую функцию. Он запрашивает у сервера только лишь мета-данные, и, соответственно, из ответа исключается тело сообщения. В основном это удобно для получения информации о файлах не скачивая их. Еще методом HEAD можно проверить валидность URI.

PUT

Этот метод нужен для загрузки данных на указанный URL. Данный метод предпочтительно использовать при передаче больших объёмов информации.

OPTIONS

Данный метод запрашивает конфигурацию сервера, это полезно для определения совместимости клиента и сервера, и соответственно, для использования правильных и понятных методов. Так же можно использовать метод OPTIONS как некий аналог команды ping — для определения работоспособности сервера.

Выглядит это так:

OPTIONS * HTTP/1.1

Вот мы и рассмотрели основные методы. Конечно же их гораздо больше, но остальные очень специфичны.

URI

Как мы помним, после методов в стартовой строке идёт URI (это почти как URL).

Вы наверное сразу узнали эту аббревиатуру. И действительно, URL — это символьная ссылка. Основное различие между URL и URI это то, что первый указывает непосредственно только на ресурс, а последний идентифицирует его. Принято считать, что URI включает в себя URL.

Пример URI:

http://ru.wikipedia.org/wiki/URI

Версия HTTP

Последняя часть стартовой строки это версия HTTP.

Указание версии является скорее справочной информацией для сервера, нежели жестким указанием версии на которой нужно работать. Получая запрос сервер сравнивает свою версию с клиентской и определяет какой вид и какие правила оформления ответа следует использовать. Например, на сервере установлена версия 1.0, а в запросе указана версия 1.1. В таком случае сервер ответит в формате 1.0, это нормально, ведь более новая версия поддерживает более старые.

Заголовки

Перейдём к рассмотрению следующего важного момента — заголовки. Они используются для передачи служебной информации.

Заголовки делятся на 4 группы:

  • Основные заголовки — обязательно включаются в любое сообщение клиента и сервера.
  • Заголовки запроса — можно встретить только в запросах от клиента.
  • Заголовки ответа — можно встретить только в ответах от сервера.
  • Заголовки сущности — описывают сущность каждого сообщения (может относиться как к клиенту, так и к серверу).

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

Вот основные (общие) заголовки, которые встречаются и в запросах и в ответах:

  • Cache-Control — параметры управления кэшированием.
  • Connection — информация о соединении.
  • Date — дата создания сообщения.
  • Pragma — специфические опции для выполнения.
  • Transfer-Encoding — перечень кодировок, применённых для формирования сообщения.
  • Upgrade — перечень протоколов, с которыми может работать клиент. Сервер указывает один.
  • Via — история прохождения запроса через прокси сервера, с указанием версии протокола.

Далее идут заголовки запроса, встречаются только в клиентских запросах:

  • Accept — перечень форматов, с которыми работает ресурс. Остальные игнорируются.
  • Accept-Charset — список кодировок с которыми может работать клиент.
  • Accept-Encoding — список кодировок, применяемых при кодировании сущности при передаче.
  • Accept-Language — перечень языков, с которыми может работать клиент.
  • Host — указание доменного имени и порта хоста для запрашиваемого ресурса. Нужно для работы виртуальных хостингов.
  • Max-Forwards — указывает предельное кол-во переходов по Proxy серверам.
  • Referer — указывает URI ресурса, с которого клиент сделал запрос.
  • User-Agent — перечень названий и версий компонентов системы клиента.

Теперь обратимся к заголовкам ответа:

  • Location — указывает URI ресурса или URI, на который нужно перейти.
  • Public — перечисляет доступные методы, подобно Allow, но для всего сервера.
  • Server — перечень названий и версий ПО на сервере, для прокси это поле Via.

И в конце рассмотрим заголовки-сущности.

Они могут в запросах и ответах.

Общие:

  • Content-Encoding — указывает способ кодирования сущности.
  • Content-Language — язык содержимого.
  • Content-Length — размер сообщения выраженный в октетах.
  • Content-Location — резервное расположение сущности.
  • Content-MD5 — MD5-хэш для проверки целостности полученных данных.
  • Content-Type — способ и формат отображения сущности.
  • Link — ссылка на связанный с сущностью ресурс.
  • Title — заголовок сущности.

Для ответов:

  • Allow — перечень методов, поддерживаемых именно этим ресурсом.

Коды состояний

И в конце, последний штрих — коды состояний.

Они используются для определения состояния запроса, разделены на 5 групп. Каждая группа имеет собственный «общий смысл»:

  • 1xx — информационные. Они описывают процесс передачи.
  • 2xx — успешные. Эти говорят нам об успешной передаче.
  • 3xx — перенаправленные. Эти же сигнализируют о перенаправлении запроса.
  • 4xx — ошибка клиента. Ошибки в запросе, синтаксисе, хосте обращения и т.д.
  • 5xx — ошибка сервера. Ошибки в выполнении запроса ,связанные с сервером.

Некоторые из следующих кодов могут быть вам знакомы:

  • 200 ОК — означает что всё в порядке, запрос обработан и дан ответ.
  • 301 Moved Permanently — означает что нужный документ перенесён на другой URI. Новый адрес указывается в заголовке Location.
  • 302 Found(v1.1), Moved Temporarily(v1.0) — указывает на то, что нужный документ временно перенесён на другой URI, который находится в заголовке Location.
  • 400 Bad Request — означает что в запросе допущена синтаксическая ошибка.
  • 401 Unauthorized — означает что для доступа нужно пройти аутентификацию.
  • 403 Forbidden — не хватает прав доступа для выполнения запроса.
  • 404 Not Found — сервер не может найти запрошенный URI.
  • 500 Internal Server Error — любая ошибка сервера, если она не подходит под любой другой код ответа.

Живые примеры

На сайте PortScan.ru вы можете посмотреть параметры GET-запроса вашего браузера. А так же посмотреть какой код состояния и заголовки возвращает любой сервер.

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

Как мы помним, минимальный вид корректного запроса выглядит примерно так:

GET / HTTP/1.1
Host: targethost

В ответ, скорее всего, можем получить нечто следующее:

HTTP/1.1 200 OK
Server: Apache/2.2.16 (Debian)
Content-Type: application/octet-stream
Content-Length: 0
Date: Tue, 30 Jul 2013 06:31:34 GMT
X-Varnish: 2908054794
Age: 0
Via: 1.1 varnish
Connection: keep-alive
X-Varnish-Cache: MISS

Однако, как не сложно догадаться минимальный вид не используется повсеместно. Вот как выглядят запросы и ответы в популярных браузерах:

Google Chrome

Запрос:

Host: portscan.ru
Connection: keep-alive
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.72 Safari/537.36
DNT: 1
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4

Ответ:

HTTP/1.1 200 OK
Date: Wed, 31 Jul 2013 11:21:54 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=5
Server: Apache
Cache-Control: max-age=0
Expires: Wed, 31 Jul 2013 11:21:54 GMT

После заголовка, через пустую строку идёт тело сообщения: собственно сайт.

Mozilla Firefox

Запрос:

GET / HTTP/1.1
Host: portscan.ru
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Connection: keep-alive
Cache-Control: max-age=0

Ответ:

HTTP/1.1 200 OK
Date: Wed, 31 Jul 2013 11:25:47 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=5
Server: Apache
Cache-Control: max-age=0
Expires: Wed, 31 Jul 2013 11:25:47 GMT

Internet Explorer 10

Запрос:

GET / HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: ru-RU
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; NP06)
Accept-Encoding: gzip, deflate
Host: portscan.ru
DNT: 1
Connection: Keep-Alive

Ответ:

HTTP/1.1 200 OK
Date: Wed, 31 Jul 2013 11:27:30 GMT
Content-Type: text/html; charset=UTF-1251
Transfer-Encoding: chunked
Connection: keep-alive
Keep-Alive: timeout=5
Server: Apache
Cache-Control: max-age=0
Expires: Wed, 31 Jul 2013 11:27:30 GMT

Что же происходит в промежутке между тем, как мы набрали адрес сайта в браузере, и моментом, когда его содержимое отобразилось на экране?

Схема клиент-серверного взаимодействия при работе браузера

После того как URL сайта введен в адресную строку и нажата клавиша Enter, браузер формирует пакет данных, который посылает по сети. Этот пакет содержит URL запрашиваемого сайта, а также прочие данные запроса, оформленные согласно протоколу HTTP. Содержание пакета нас сейчас не интересует, важно то, что переданный URL позволяет промежуточным узлам в Интернете доставить наш пакет с HTTP-запросом по адресу до нужного сервера.

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

Самым популярным веб-сервером на данный момент является программа Apache.

После получения пакета с HTTP-запросом веб-сервер определяет, какие действия необходимы для его обработки. Если HTTP-запрос осуществляется к обычной HTML-странице, то веб-сервер просто передает ее содержимое браузеру. Если же HTTP-запрос осуществляется к какому-либо сценарию (например, PHP-сценарию), веб-сервер передает запрос на обработку соответствующей программе, отвечающей за обработку этого типа сценариев. Обработчик сценария в свою очередь может вызывать другие программы в ходе своей работы, например СУБД MySQL.

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

Протокол HTTP

Давайте дадим более четкое определение протоколу HTTP и разберемся, зачем он нужен

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

Иными словами, HTTP — это язык, на котором общаются браузер и веб-сервер при обмене пакетами с данными. Обмен сообщениями в ходе HTTP-соединения идет по обыкновенной схеме «запрос—ответ».

Каждое HTTP-сообщение состоит из трех частей, которые передаются в указанном порядке:

  1. Стартоваястрока — определяет тип сообщения.
  2. Заголовки — характеризуют тело сообщения, параметры передачи и прочие сведения.
  3. Тело сообщения — непосредственно данные сообщения. Обязательно должно отделяться от заголовков пустой строкой.

Заголовки и тело сообщения могут отсутствовать, но стартовая строка является обязательным элементом, т. к. указывает на тип запроса/ответа.

Стартовые строки HTTP-запросов и HTTP-ответов различны. 

Для HTTP-запроса стартовая строка имеет следующий вид:

МЕТОД URI HTTP/Версия

  1. МЕТОД — название запроса, одно слово прописными буквами. В версии HTTP 0.9 использовался только метод GET, список запросов для версии 1.1 представлен далее;
  2. URI определяет путь к запрашиваемому документу;
  3. Версия — пара разделенных точкой арабских цифр. Например: 1.0 . Определяет версию используемого HTTP-протокола. На данный момент наиболее актуальной является версия 1.1.

Для HTTP-ответа стартовая строка выглядит следующим образом:

HTTP/Версия КодСостояния Пояснение

  1. Версия — пара разделенных точкой арабских цифр как в запросе;
  2. КодСостояния — три цифры. По коду состояния определяется дальнейшее содержимое сообщения и поведение клиента;
  3. Пояснение — текстовое короткое пояснение к коду ответа для пользователя. Никак не влияет на сообщение и является необязательным.

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

Закрыть меню