Подпишите кто является клиентом а кто сервером
Перейти к содержимому

Подпишите кто является клиентом а кто сервером

  • автор:

Передача данных между клиентом и сервером

Для создания производительных приложений недостаточно научиться работать с клиентскими компонентами и SQL. Нужно еще понимать процессы, происходящие между клиентом и сервером при выполнении запросов.

Давайте рассмотрим взаимодействие на конкретном примере. В качестве клиента у нас выступает приложение и gds32.dll (fbclient.dll), поскольку все высокоуровневые вызовы компонент доступа к БД все равно превращаются в вызовы gds32.dll). Тип соединения (локальный, сетевой tcp или netbeui) не имеет значения.

Также опускаем все подробности по установке соединения и вызовам всяческих сервисных или информационных функций. Основная деятельность между клиентом и сервером – это обработка запросов SQL. На картинке изображена последовательность действий между клиентом и сервером при выполнении любого запроса. Пусть это будет

SELECT * FROM TEST

  1. Независимо от того, один вызов клиентской библиотеки выполняет запрос, или несколько, gds32.dll всегда начинает с Prepare. Prepare означает отправку запроса на сервер. При этом сервер
  • проверяет синтаксическую корректность запроса
  • проверяет наличие всех объектов, указанных в запросе, и права доступа к ним.
  • формирует список возвращаемых столбцов и параметров (если таковые есть)
  • передает клиенту результат prepare (ok, error), и списки столбцов и параметров (если есть)

после выполнения prepare от сервера можно получить план запроса – для примера см. код IBX.

  1. Раз запрос корректен, и вся информация для получения данных, возвращаемых запросом, получена от сервера, запрос можно выполнить. Вызывается Execute. Собственно, только в этот момент сервер начинает выполнять запрос.

На данном этапе, пока запрос не выполнится целиком, клиент не получит никакого сообщения. Под «выполнением» запроса означает готовность сервера к выдаче первой записи, возвращаемой запросом, или успешного/неуспешного выполнения запроса (например выполнение операторов ddl или процедур, не возвращающих результат, а также update, insert, delete).
Время выполнения запроса зависит от метода его обработки на сервере. Если это прямое считывание данных с диска (в натуральном порядке или по индексу), то ответ сервера на Execute придет быстро. Если это группировка или сортировка без использования индекса, то чем больше обрабатывается данных, тем дольше будет выполняться запрос.

  1. Запрос выполнен, и теперь клиент может начать получать записи (если они есть). Для этого клиент вызывает функцию Fetch. С точки зрения клиента (и приложения) Fetch – это получение одной записи. Но сервер всегда (кроме select for update) передает клиенту целый пакет записей. Поэтому первый Fetch приводит к получению пакета записей, а очередные Fetch – к выборке из полученного пакета (фактически буфера) до тех пор, пока записи в пакете не кончатся.
  2. Если в момент очередного Fetch клиент вместо данных записи получает EOF (End Of File), то значит на сервере данные кончились, и запрос можно закрыть.
  1. С момента выдачи серверу Execute до получения от сервера ответа (о готовности выдавать результат) клиент как бы «повисает», а сервер продолжает выполнять запрос «до упора». Если в этот момент принудительно «снять» клиентское приложение, сервер все равно проверит существование клиентского соединения только когда закончит выполнять запрос, т. е. соберется передавать результат клиенту. Существуют только две версии серверов, в которых запрос в этот момент можно отменить:
  • IB 6.5, при помощи вызова IB API (в отдельном thread). Подробнее обратитесь к APIGuide.pdf от IB 6.5/7.0
  • IB 7.x, при помощи временных системных таблиц (в отдельном коннекте). Подробнее см. OpGuide.pdf от IB 7.x
  1. На пути данных от сервера к клиенту может возникнуть тройная буферизация:
  • данные запросов, сортируемые на диске, формируются в момент Execute и удерживаются сервером до тех пор, пока клиент не выберет последнюю запись. Т. е. это своеобразный «кэш запроса на сервере», причем кэш, индивидуальный для каждого запроса, содержащего в плане слово SORT.
  • Клиент, запрашивая данные «поштучно», все равно получает от сервера «пакеты записей», т. е. буфер присутствует в gds32.dll
  • Клиентские компоненты (BDE, FIBPlus, IBX. ) так или иначе тоже буферизируют принимаемые данные. Особенно это относится к компонентам dbExpress, где обеспечить навигацию по записям можно только буферизировав их (целиком все записи) при помощи ClientDataSet.

Не буферизируют записи такие компоненты, как IBX.IBSQL и FIBPlus.pFIBQuery.

  • Сортировка большого количества записей приводит к длительному выполнению запроса на сервере (методы ускорения этого есть во всех последних версиях IB, FB и YA) и к неспособности клиента в это время выполнять другие действия (в этом коннекте. О параллельной работе в разных коннектах см. FAQ).
  • Многочисленная буферизация приводит к тому, что данные становятся «неактуальными» задолго до того, как клиент их начнет просматривать. Собственно, здесь нет никаких проблем с точки зрения целостности данных в транзакции.

Другие статьи на эту же тему

  • Обновление клиентских наборов данных
  • Как работает BDE (TTable и TQuery)?
  • IBX (IBDataSet)
  • Все о ClientDataSet

Copyright iBase.ru © 2002-2023

Технология клиент-сервер: что это такое?

banner

Технология клиент-сервер — это сетевая архитектура, в которой процессы обмена данными или файлами распределена между так называемыми поставщиками и заказчиками. Сам по себе принцип очень простой, и с ним мы сталкиваемся практически каждый раз, когда работаем за компьютерным или мобильным устройством. Но понимание более детальных принципов построения связи между клиентов и сервером важно не только системным администраторам и IT-специалистам, но и простым пользователям. А при использовании серверного оборудования и СКУД эта технология является базовой.

В технологии клиент-сервер есть два главных действующих лица:

  • клиент — компьютерное или мобильное устройство при управлении пользователем, которое отправляет запрос или команду серверу (например, ввод поискового запроса в Google тоже относится к этому процессу);
  • сервер — аппаратный или облачный сервер, который принимает запрос и выполняет его (обработка данных на сайтах, приложениях и в сервисах происходит через веб-узлы).

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

Если бы не существовало архитектуры “клиент-сервер”, то работать в интернете было бы очень сложно. Дело в том, что все запросы конкретный сервер обрабатывает не одновременно, а в приоритетной очередности. Как и любой компьютерный процессор. Например, через мессенджер Telegram одновременно отправляют сообщение 10 000 пользователей. Сервера в data-центре компании Telegram получают этот запрос (от клиентов) и выполняют его в порядке очередности с молниеносной скоростью (основную функцию обработки выполняют процессоры серверного оборудования). Но если одновременно будет отправляться не 10 000, а, например, 100 000 или более сообщений, то может возникнуть задержка в обработке из-за нехватки вычислительных мощностей. Чье-то сообщение в очереди отправляется быстрее, а чье-то на доли миллисекунд или секунд дольше. Зависит от приоритетности.

При отсутствии сетевой архитектуры “клиент-сервер” все запросы выполнялись бы на серверном оборудовании одновременно и в хаотичном порядке. Это делало бы обработку данных во много раз дольше, не считая и других недостатков.

Помимо этого, архитектура “клиент-сервер” означает ещё и способ доставки пользователю данных какого-либо приложения. Благодаря данной архитектуре появился способ обеспечения безопасности при работе с приложениями. Есть возможность отследить сессии клиента, и на сессионном уровне (пятый уровень эталонной модели OSI) обеспечить контроль над клиентами. Это повышает и безопасность и устойчивость, что очень важно в высоко нагруженных IT-системах.

Серверами в этой сетевой архитектуре могут быть серверы http, облачные СХД, веб-серверы и тому подобное. Быстрый обмен информацией при запросе осуществляется при помощи так называемых сетевых протоколов. В них содержится информация о том, какие сведения нужно предоставить по запросу или какую задачу выполнить. Ответ от сервера поступает мгновенно в виде html-документа. Это может быть любая страница веб-сайта или веб-сервиса.

Архитектура в этой технологии делится на два вида:

  1. Двухзвенная — в системе задействуется всего два устройства: клиент (любое программное обеспечение, браузер) и сервер. Пользователем отправляется запрос, который обрабатывается, и на него затем приходит ответ в виде какого-либо действия или оповещения.
  2. Многоуровневая — в системе задействуется несколько устройств, как в современной архитектуре СУБД. Задачи от клиента перераспределяются между несколькими устройствами.

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

Интернет-сеть LAN построена по такому же принципу (Client/Server network). В ней сетевые устройства управляются одним или несколькими серверами. При этом клиенты могут обращаться с запросом к сетевым ресурсам только через серверы (например, через дата-центры провайдеров). Протокол HTTP (HyperText Transfer Protocol — протокол передачи гипертекста) и HTTPS тоже работают на технологии “клиент-сервер”.

Понимание основ этой технологии позволяет разобраться в том, как работает современное серверное оборудование, и для чего оно вообще необходимо. Современная серверная архитектура позволяет перераспределить запросы от пользователей любых сайтов и веб-сервисов, обработать их и быстро исполнить. Внедрение правильной технологии клиент-сервер важно для любого IT-бизнеса, а также для организации систем СКУД в компаниях.

HTTP-запросы: структура, методы, строка статуса и коды состояния

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

Изображение записи

Большинство используемых нами веб- и мобильных приложений постоянно взаимодействуют с глобальной сетью. Почти все подобные коммуникации совершаются с помощью запросов по протоколу HTTP. Рассказываем о них подробнее.

Базово о протоколе HTTP

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

Данный протокол описывается спецификацией RFC 2616. На сегодняшний день наиболее распространенной версией протокола является версия HTTP/2, однако нередко все еще можно встретить более раннюю версию HTTP/1.1.

В обмене информацией по HTTP-протоколу принимают участие клиент и сервер. Происходит это по следующей схеме:

  1. Клиент запрашивает у сервера некоторый ресурс.
  2. Сервер обрабатывает запрос и возвращает клиенту ресурс, который был запрошен.

Схема коммуникации устройств по HTTP-протоколу.

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

HTTP-сообщения: запросы и ответы

Данные между клиентом и сервером в рамках работы протокола передаются с помощью HTTP-сообщений. Они бывают двух видов:

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

Само по себе сообщение представляет собой информацию в текстовом виде, записанную в несколько строчек.

В целом, как запросы HTTP, так и ответы имеют следующую структуру:

  1. Стартовая строка (start line) — используется для описания версии используемого протокола и другой информации — вроде запрашиваемого ресурса или кода ответа. Как можно понять из названия, ее содержимое занимает ровно одну строчку.
  2. HTTP-заголовки (HTTP Headers) — несколько строчек текста в определенном формате, которые либо уточняют запрос, либо описывают содержимое тела сообщения.
  3. Пустая строка, которая сообщает, что все метаданные для конкретного запроса или ответа были отправлены.
  4. Опциональное тело сообщения, которое содержит данные, связанные с запросом, либо документ (например HTML-страницу), передаваемый в ответе.

Рассмотрим атрибуты HTTP-запроса подробнее.

Стартовая строка

Стартовая строка HTTP-запроса состоит из трех элементов:

  1. Метод HTTP-запроса (method, реже используется термин verb). Обычно это короткое слово на английском, которое указывает, что конкретно нужно сделать с запрашиваемым ресурсом. Например, метод GET сообщает серверу, что пользователь хочет получить некоторые данные, а POST — что некоторые данные должны быть помещены на сервер.
  2. Цель запроса. Представлена указателем ресурса URL, который состоит из протокола, доменного имени (или IP-адреса), пути к конкретному ресурсу на сервере. Дополнительно может содержать указание порта, несколько параметров HTTP-запроса и еще ряд опциональных элементов.
  3. Версия используемого протокола (либо HTTP/1.1, либо HTTP/2), которая определяет структуру следующих за стартовой строкой данных.

В примере ниже стартовая строка указывает, что в качестве метода используется GET, обращение будет произведено к ресурсу /index.html, по версии протокола HTTP/1.1:

Основные структурные элементы URL.

Разберемся с каждым из названных элементов подробнее.

Методы

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

Ниже приведены наиболее используемые методы и их описание:

Методы запроса.

Разберемся с каждым из названных элементов подробнее.

Метод Описание
GET Позволяет запросить некоторый конкретный ресурс. Дополнительные данные могут быть переданы через строку запроса (Query String) в составе URL (например ?param=value).О составляющих URL мы поговорим чуть позже.
POST Позволяет отправить данные на сервер. Поддерживает отправку различных типов файлов, среди которых текст, PDF-документы и другие типы данных в двоичном виде. Обычно метод POST используется при отправке информации (например, заполненной формы логина) и загрузке данных на веб-сайт, таких как изображения и документы.
HEAD Здесь придется забежать немного вперед и сказать, что обычно сервер в ответ на запрос возвращает заголовок и тело, в котором содержится запрашиваемый ресурс. Данный метод при использовании его в запросе позволит получить только заголовки, которые сервер бы вернул при получении GET-запроса к тому же ресурсу. Запрос с использованием данного метода обычно производится для того, чтобы узнать размер запрашиваемого ресурса перед его загрузкой.
PUT Используется для создания (размещения) новых ресурсов на сервере. Если на сервере данный метод разрешен без надлежащего контроля, то это может привести к серьезным проблемам безопасности.
DELETE Позволяет удалить существующие ресурсы на сервере. Если использование данного метода настроено некорректно, то это может привести к атаке типа «Отказ в обслуживании» (Denial of Service, DoS) из-за удаления критически важных файлов сервера.
OPTIONS Позволяет запросить информацию о сервере, в том числе информацию о допускаемых к использованию на сервере HTTP-методов.
PATCH Позволяет внести частичные изменения в указанный ресурс по указанному расположению.

URL

Получение доступа к ресурсам по HTTP-протоколу осуществляется с помощью указателя URL (Uniform Resource Locator). URL представляет собой строку, которая позволяет указать запрашиваемый ресурс и еще ряд параметров.

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

Поле Scheme используется для указания используемого протокола, всегда сопровождается двоеточием и двумя косыми чертами (://).

Host указывает местоположение ресурса, в нем может быть как доменное имя, так и IP-адрес.

Port, как можно догадаться, позволяет указать номер порта, по которому следует обратиться к серверу. Оно начинается с двоеточия (:), за которым следует номер порта. При отсутствии данного элемента номер порта будет выбран по умолчанию в соответствии с указанным значением Scheme (например, для http:// это будет порт 80).

Далее следует поле Path. Оно указывает на ресурс, к которому производится обращение. Если данное поле не указано, то сервер в большинстве случаев вернет указатель по умолчанию (например index.html).

Поле Query String начинается со знака вопроса (?), за которым следует пара «параметр-значение», между которыми расположен символ равно (=). В поле Query String могут быть переданы несколько параметров с помощью символа амперсанд (&) в качестве разделителя.

Не все компоненты необходимы для доступа к ресурсу. Обязательно следует указать только поля Scheme и Host.

Версии HTTP

Раз уж мы упомянули версию протокола как элемента стартовой строки, то стоит сказать об основных отличиях версий HTTP/1.X от HTTP/2.X.

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

Стало очевидно, что у HTTP/1.1 есть ряд значительных недостатков:

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

С выходом HTTP/2 было предложено следующее решение: HTTP/1.X-сообщения разбивались на так называемые фреймы, которые встраивались в поток данных.

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

Единственное о чем стоит сказать в завершение темы: HTTP/2 перестал быть текстовым протоколом, а стал работать с «сырой» двоичной формой данных. Это ограничивает чтение и создание HTTP-сообщений «вручную». Однако такова цена за возможность реализации более совершенной оптимизации и повышения производительности.

Заголовки

HTTP-заголовок представляет собой строку формата «Имя-Заголовок:Значение», с двоеточием(:) в качестве разделителя. Название заголовка не учитывает регистр, то есть между Host и host, с точки зрения HTTP, нет никакой разницы. Однако в названиях заголовков принято начинать каждое новое слово с заглавной буквы. Структура значения зависит от конкретного заголовка. Несмотря на то, что заголовок вместе со значениями может быть достаточно длинным, занимает он всего одну строчку.

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

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

Ниже можно видеть пример заголовков в запросе:

Самые частые заголовки запроса
Заголовок Описание
Host Используется для указания того, с какого конкретно хоста запрашивается ресурс. В качестве возможных значений могут использоваться как доменные имена, так и IP-адреса. На одном HTTP-сервере может быть размещено несколько различных веб-сайтов. Для обращения к какому-то конкретному требуется данный заголовок.
User-Agent Заголовок используется для описания клиента, который запрашивает ресурс. Он содержит достаточно много информации о пользовательском окружении. Например, может указать, какой браузер используется в качестве клиента, его версию, а также операционную систему, на которой этот клиент работает.
Refer Используется для указания того, откуда поступил текущий запрос. Например, если вы решите перейти по какой-нибудь ссылке в этой статье, то вероятнее всего к запросу будет добавлен заголовок Refer: https://selectel.ru
Accept Позволяет указать, какой тип медиафайлов принимает клиент. В данном заголовке могут быть указаны несколько типов, перечисленные через запятую (‘ , ‘). А для указания того, что клиент принимает любые типы, используется следующая последовательность — */*.
Cookie Данный заголовок может содержать в себе одну или несколько пар «Куки-Значение» в формате cookie=value. Куки представляют собой небольшие фрагменты данных, которые хранятся как на стороне клиента, так и на сервере, и выступают в качестве идентификатора. Куки передаются вместе с запросом для поддержания доступа клиента к ресурсу. Помимо этого, куки могут использоваться и для других целей, таких как хранение пользовательских предпочтений на сайте и отслеживание клиентской сессии. Несколько кук в одном заголовке могут быть перечислены с помощью символа точка с запятой (‘ ; ‘), который используется как разделитель.
Authorization Используется в качестве еще одного метода идентификации клиента на сервере. После успешной идентификации сервер возвращает токен, уникальный для каждого конкретного клиента. В отличие от куки, данный токен хранится исключительно на стороне клиента и отправляется клиентом только по запросу сервера. Существует несколько типов аутентификации, конкретный метод определяется тем веб-сервером или веб-приложением, к которому клиент обращается за ресурсом.

Тело запроса

Завершающая часть HTTP-запроса — это его тело. Не у каждого HTTP-метода предполагается наличие тела. Так, например, методам вроде GET, HEAD, DELETE, OPTIONS обычно не требуется тело. Некоторые виды запросов могут отправлять данные на сервер в теле запроса: самый распространенный из таких методов — POST.

Ответы HTTP

HTTP-ответ является сообщением, которое сервер отправляет клиенту в ответ на его запрос. Его структура равна структуре HTTP-запроса: стартовая строка, заголовки и тело.

Строка статуса (Status line)

Стартовая строка HTTP-ответа называется строкой статуса (status line). На ней располагаются следующие элементы:

  1. Уже известная нам по стартовой строке запроса версия протокола (HTTP/2 или HTTP/1.1).
  2. Код состояния, который указывает, насколько успешно завершилась обработка запроса.
  3. Пояснение — короткое текстовое описание к коду состояния. Используется исключительно для того, чтобы упростить понимание и восприятие человека при просмотре ответа.

Строка состояния ответа.

Коды состояния и текст статуса

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

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

Полный список кодов состояния доступен в спецификации к протоколу, ниже приведены только самые распространенные коды ответов:

Категория Описание
200 OK Возвращается в случае успешной обработки запроса, при этом тело ответа обычно содержит запрошенный ресурс.
302 Found Перенаправляет клиента на другой URL. Например, данный код может прийти, если клиент успешно прошел процедуру аутентификации и теперь может перейти на страницу своей учетной записи.
400 Bad Request Данный код можно увидеть, если запрос был сформирован с ошибками. Например, в нем отсутствовали символы завершения строки.
403 Forbidden Означает, что клиент не обладает достаточными правами доступа к запрошенному ресурсу. Также данный код можно встретить, если сервер обнаружил вредоносные данные, отправленные клиентом в запросе.
404 Not Found Каждый из нас, так или иначе, сталкивался с этим кодом ошибки. Данный код можно увидеть, если запросить у сервера ресурс, которого не существует на сервере.
500 Internal Error Данный код возвращается сервером, когда он не может по определенным причинам обработать запрос.

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

Заголовки ответа

Response Headers, или заголовки ответа, используются для того, чтобы уточнить ответ, и никак не влияют на содержимое тела. Они существуют в том же формате, что и остальные заголовки, а именно «Имя-Значение» с двоеточием (:) в качестве разделителя.

Ниже приведены наиболее часто встречаемые в ответах заголовки:

Категория Пример Описание
Server Server: ngnix Содержит информацию о сервере, который обработал запрос.
Set-Cookie Set-Cookie:PHPSSID=bf42938f Содержит куки, требуемые для идентификации клиента. Браузер парсит куки и сохраняет их в своем хранилище для дальнейших запросов.
WWW-Authenticate WWW-Authenticate: BASIC realm=»localhost» Уведомляет клиента о типе аутентификации, который необходим для доступа к запрашиваемому ресурсу.

Тело ответа

Последней частью ответа является его тело. Несмотря на то, что у большинства ответов тело присутствует, оно не является обязательным. Например, у кодов «201 Created» или «204 No Content» тело отсутствует, так как достаточную информацию для ответа на запрос они передают в заголовке.

Безопасность HTTP-запросов, или что такое HTTPs

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

Данные http-запроса передаются в открытом виде.

Да, все верно: данные передаются в открытом виде. HTTP сам по себе не предоставляет никаких средств шифрования.

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

Время рассказать про HTTPs!

HTTPs (HyperText Transfer Protocol, secure) является расширением HTTP-протокола, который позволяет шифровать отправляемые данные, перед тем как они попадут на транспортный уровень. Данный протокол по умолчанию использует порт 443.

Теперь если мы перехватим не HTTP , а HTTPs-запрос, то не увидим здесь ничего интересного:

Шифрование данных в https.

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

Если хотите подробнее узнать о деталях работы протокола, читайте статью в нашем блоге →

Как отправить HTTP-запрос и прочитать его ответ

Теория это, конечно, отлично, но ничего так хорошо не закрепляет материал, как практика

Мы рассмотрим несколько способов, как написать HTTP-запрос в браузер, послать HTTP-запрос на сервер и получить ответ:

  1. Инструменты разработчика в браузере.
  2. Утилита cURL.

Инструменты разработчика

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

По нажатию комбинации клавиш [Ctrl+Shift+I] или просто [F12] в подавляющем большинстве современных браузеров у нас откроется окно инструментов разработчика, которая представляет собой панель с несколькими вкладками. Нужная нам вкладка обычно называется Network. Перейдем в нее, а в адресной строке введем URL того сайта, на который хотим попасть. В качестве примера воспользуемся сайтом блога Selectel — https://selectel.ru/blog/.

После нажатия Enter сайт начнет загружаться, а открытая вкладка Network — заполняться различными элементами, начиная все больше напоминать приборную панель самолета.

Вкладка network.

Не спешите пугаться. Это всего лишь список ресурсов, которые нужны для правильного отображения и работы сайта.

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

Детали обработки запроса.

В данном запросе, например:

  • URL, к которому было совершено обращение — https://selectel.ru/blog,
  • Метод, который был использован в запросе — GET,
  • И в качестве кода возврата сервер вернул нам страницу с кодом статуса — 200 OK

Утилита cURL

Следующий инструмент, с помощью которого мы сможем послать запрос на тот или иной сервер, это утилита cURL.

cURL (client URL) является небольшой утилитой командной строки, которая позволяет работать с HTTP и рядом других протоколов.

Для отправки запроса и получения ответа мы можем воспользоваться флагом -v и указанием URL того ресурса, который мы хотим получить. «Схему» HTTP-запроса можно увидеть на скрине ниже:

Схема запроса.

После запуска утилита выполняет:

  • подключение к серверу,
  • самостоятельно разрешает все вопросы, необходимые для отправки запроса по HTTPs,
  • отправляет запрос, содержимое которого мы можем видеть благодаря флагу -v,
  • принимая ответ от сервера, отображает его в командной строке «как-есть».

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

Заключение

HTTP представляет собой расширяемый протокол прикладного уровня, на котором работает весь веб-сегмент интернета. В данной статье мы рассмотрели принцип его работы, структуру, «компоненты» HTTP-запросов. Коснулись вопросов отличия версий протокола, HTTPs — его расширения, добавляющего шифрование. Разобрали устройство запроса, поняли, как можно отправить HTTP-запрос и получить ответ от сервера.

Сервер

Сервер (от англ. server — обслуживающий) — сетевой компьютер, обрабатывающий запросы от других компьютеров в локальной или глобальной сети. Как правило, сервер выделен из всей группы компьютеров, подключенных к единой сети, работает автономно, без участия человека, за исключением первичной настройки. Также под этим термином подразумевается программное обеспечение, обрабатывающее пользовательские запросы.

Освойте профессию
«Cистемный администратор»

Устройство и функции сервера

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

Системный администратор

Станьте универсальным специалистом по администрированию Linux с нуля

cables_2 2-PhotoRoom 1 (3)

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

Техническая (аппаратная) реализация сервера бывает разной. В зависимости от нее он может принадлежать к одному из следующих типов.

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

Выделенный в сети сервер работает под управлением специализированных операционных систем и другого ПО в автономном режиме. Участие человека предполагается только на этапе запуска/наладки, а также замены, ремонта или расширения оборудования. Устройство сервера включает специализированный процессор с большим (до 64) количеством ядер для параллельных вычислений, а также значительные объемы оперативной и долговременной памяти. К каждому такому компьютеру можно подключить клавиатуру и монитор, но обычно он просто подсоединяется к сети и настраивается через общую консоль.

Сисадмин — давно не человек, который настраивает компьютеры. Станьте сильным специалистом, который поддерживает инфраструктуру компании.

Невыделенный. Это сервер, созданный на базе обычного ПК путем расширения памяти за счет установки нескольких жестких дисков (RAID-массива), покупки постоянного IP-адреса у провайдера и настройки ПО на обработку пользовательских запросов, обеспечение безопасности и резервного копирования данных. При этом пользователь может подключить к нему клавиатуру, мышь, монитор и другие периферийные устройства, чтобы продолжать применять его как обычный ПК: например, для офисной работы, обработки изображений или видео и т.д. Такие серверы не предназначены для больших объемов информации из-за ограниченности ресурсов. Наиболее часто создаются невыделенные серверы для локальных сетей небольших организаций. В то же время функционально они практически не отличаются от выделенных серверов.

Одноплатный. Это микросервер, реализованный на одной плате со встроенным или подсоединяемым модулем памяти, собственным процессором и сетевым разъемом. Типичным примером может служить популярный одноплатный компьютер Raspberry Pi. Преимущество таких серверов заключается в их низком энергопотреблении и отсутствии шума. Из-за малой вычислительной мощности они используются для сбора информации с датчиков домашних систем безопасности, «умного дома».

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

Для чего нужен сервер

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

  • Хостинг-сервер (веб-сервер) оснащен большим объемом памяти, предназначен для хранения файлов веб-сайтов, беспрерывной обработки пользовательских запросов, авторизации и аутентификации пользователей.
  • DNS-сервер предназначен для хранения доменных имен, по которым пользователь находит нужный сайт.
  • Почтовый сервер используют для получения, обработки, отправки электронных писем пользователей, а также их хранения на встроенных накопителях.
  • Облачный сервер предоставляет пользователю часть своих ресурсов (например, для хранения файлов, разработки ПО) путем виртуализации (создания виртуальных машин).
  • Файловый сервер — хранилище файлов (текстов, музыки, видеофильмов, ПО), откуда их может скачать пользователь.
  • SQL-сервер предназначен для хранения баз данных, позволяет подключенным пользователям изменять, получать и передавать содержащиеся в нем сведения.
  • Медиасервер предоставляет пользователям доступ к медиафайлам или обеспечивает их потоковую передачу в реальном времени.
  • Прокси-сервер — промежуточный узел (как правило, в другом регионе или стране), через который пользователь может подключиться к интернет-ресурсу — например, чтобы сохранить анонимность или получить доступ к заблокированному контенту.

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

Как работает сервер

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

  • Пользователь подключает компьютер или другое устройство к локальной или глобальной сети (через проводное или беспроводное соединение). При этом его клиент получает свой адрес, по которому к нему может обращаться сервер.
  • Далее сервер начинает «прослушивать» канал, при этом он может пассивно ожидать от пользователя (точнее, его устройства) запрос или самостоятельно отправлять клиенту инициирующий запрос.
  • Пользователь с помощью компьютера, на котором установлен браузер или иная программа (клиент) для общения с сервером (это могут быть также игровые, мобильные приложения), вводит запрос — например, адрес сайта в поисковую строку браузера.
  • Сервер принимает запрос, автоматически обрабатывает его в соответствии с предусмотренными в программе правилами и отправляет клиенту (пользовательской программе) ответ.

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

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

Варианты реакции сервера на запросы ограничены лишь его настройками. Но обычно используется определенный стандартный набор закодированных ответов. Это сделано для международной унификации работы серверов, ведь часто машины, расположенные, например, в США, обслуживают пользователей из России, Европы, Китая.

Типы серверных архитектур

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

Альтернатива этой модели — децентрализованная архитектура «peer-to-peer» (отсюда другое название — пиринговая). В ней взаимодействие происходит между равноценными устройствами, каждое из которых может играть роль как сервера, так и клиента. Благодаря этому в пиринговой сети нет информационных центров, а количество подключенных устройств потенциально безгранично. Эту модель используют в организации файлообменных сетей (торрентов), торговых интернет-площадок, платежных систем.

Реализация обмена данными между сервером и клиентом

Взаимодействие между сервером и клиентом (пользовательским ПК или иным подключенным устройством) идет на двух уровнях.

Физическом. Чтобы сервер и клиент могли взаимодействовать, между ними должен быть открыт физический канал для передачи информации. Для этого выполняют подключение посредством специальных интерфейсов: проводного Ethernet или беспроводных Wi-Fi, Bluetooth, WiBro. По этому каналу сервер и клиент обмениваются физическим носителем информации — электрическим или радиосигналом. Такое физическое соединение бывает:

  • непосредственным — когда клиентский компьютер напрямую подключен к серверу (в небольших локальных сетях);
  • опосредованным — когда устройство конечного пользователя подключается к серверу опосредованно через другие компьютеры (в масштабных локальных или глобальных сетях).

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

  • HTTP (Hyper Text Transfer Protocol) — с его помощью гипертекст (то есть веб-страницы) передается между компьютерами, которые подключены к одной локальной или глобальной сети;
  • FTP (File Transfer Protocol) — для обмена файлами (скачивания или загрузки) между пользовательским устройством и файловым сервером;
  • POP3 (Post Office Protocol) — для организации стандартного обмена электронной почтой между пользовательским ПК с установленной на нем почтовой программой и POP-сервером;
  • SMTP (Simple Mail Transfer Protocol) — дополнительный протокол задает правила, по которым осуществляется обмен почтовыми сообщениями: когда выдать ошибку, а когда удовлетворить запрос пользователя;
  • TELNET — протокол, который обеспечивает удаленный доступ абонента к любому компьютеру, подключенному к той же сети. Служит для установки и запуска на нем программ, изменения режимов работы в соответствии с правами, которые предоставляет администратор;
  • TCP (Transmission Control Protocol) — для пакетной передачи данных в интернете между двумя конечными устройствами (клиентским и серверным ПК);
  • IP (Internet Protocol) — протокол межсетевой пакетной передачи данных позволяет объединять локальные сети в одну глобальную (интернет, дословно — «междусеть») и доставлять в ней информацию между любыми устройствами через произвольное число промежуточных узлов.

Протоколы передачи данных бывают разных подвидов. Они могут улучшать или изменять свойства «прародителей». Например, протокол HTTPS — версия HTTP с защитой (шифрованием) соединения для более безопасной передачи данных между интернет-сервером и клиентом. Помимо указанных выше протоколов общего пользования, существуют также узкоспециализированные, разработанные отдельными коммерческими, научными, государственными, военными учреждениями. Это, например, DTN (Delay-tolerant networking — устойчивая к разрывам сеть). Его используют американские оборонные ведомства и НАСА для связи со спутниками и другими космическими аппаратами.

Где используются серверы?

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

  • поиск, обработка и хранение больших массивов информации;
  • математические вычисления и научные исследования;
  • общение и другие виды взаимодействия между пользователями (например, игры);
  • создание различных видов медиаконтента: текстов, музыки, видеороликов, фильмов;
  • разработка системного и прикладного программного обеспечения;
  • административная деятельность — управление персоналом, распределение прав доступа;
  • обеспечение безопасности охраняемого объекта за счет видеонаблюдения, работы датчиков дыма, движения;
  • поддержка работоспособности информационной инфраструктуры организаций, учреждений, государств и межгосударственных объединений и многие другие задачи.

Серверы важны для работы локальных и глобальных сетей. Поэтому к ним предъявляют повышенные требования в плане работоспособности, надежности, безотказности. Серверные устройства, особенно в крупных организациях, действуют беспрерывно в режиме 24/7. Любое отключение нарушает работу сети, а это плохо и для репутации владельцев серверов, и для их клиентов.

Системный администратор

Станьте универсальным специалистом по администрированию Linux с нуля и разверните собственный кластер. Перед вами откроется широкая область для реализации и развития: от сисадмина до CTO

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *