HTTP был разработан как протокол обмена данными между веб-сервером и веб-браузером. Это протокол прикладного уровня модели OSI, который используется для передачи между клиентом и сервером файлов HTML, CSS, JS, API, картинок, аудио, видео, введённых пользователем данных и прочего. Клиент (веб-браузер) отправляет серверу (веб-серверу) запросы и получает от него ответы. Сервер в рамках протокола HTTP практически всегда занимает пассивную позицию.
Как понять
Скопировать ссылку «Как понять» Скопировано
Есть три главных объекта, которые обмениваются сообщениями:
- Клиент (user agent) — программа, которая отправляет запросы, получает и обрабатывает ответы от имени пользователя на устройстве пользователя, например, браузер.
- Сервер (веб-сервер) — программа, которая работает на сервере, принимает и обрабатывает запросы от клиента, а затем отправляет ответы клиенту. Этой программой является веб-сервер.
- Прокси (прокси-сервер) — программа, которая работает на сервере, пропускает через себя запросы и ответы и выступает в роли посредника между клиентом и сервером.
Подробнее о веб-серверах читайте в статье «Веб-сервер».
Язык Си — работа с сетью с помощью сокетов на WinApi. Делаем клиент и сервер.
На первом этапе клиент устанавливает соединение с сервером с помощью протокола транспортного уровня TCP. Клиент может переиспользовать одно и то же соединение для работы с сервером или создавать его каждый раз. Это зависит от задачи, конфигурации сети и конкретных настроек оборудования. После установки соединения клиент посылает HTTP-сообщение с телом и параметрами запроса. Сервер принимает это сообщение и на основании логики работы бэкенда формирует и отправляет HTTP-сообщение ответа.
Протокол HTTP не хранит состояние, поэтому количество соединений не приводит к существенному усложнению взаимодействия между объектами системы. Однако существует понятие сессии, с помощью которой можно передавать и хранить необходимые данные, относящиеся к конкретному сеансу связи. Данные сессии сохраняются на клиенте и на сервере. Например, доступен идентификатор сессии, который позволяет не проводить авторизацию клиента при каждом обращении к серверу.
Часто для хранения данных о сессии используются Cookie.
Прокси-серверы осуществляют сервисные функции:
- Кэшировать данные запроса или ответа для улучшения производительности и снижения сетевого трафика.
- Фильтровать данные. Например, можно сканировать данные антивирусом или использовать родительский контроль.
- Осуществлять балансировку нагрузки, распределяя запросы между разными серверами.
- Проводить аутентификацию клиентов для управления доступом к ресурсам.
- Хранить информацию о запросах клиентов и ответах сервера, реализуя таким образом логирование.
- Обнаруживать некоторые типы атак на сетевой узел (например, определение подозрительного трафика или DDoS-атаки).
Подробнее о разных атаках можно прочитать в статье «Безопасность веб-приложений».
Исполнение формы на клиенте и на сервере
Формат сообщения
Скопировать ссылку «Формат сообщения» Скопировано
HTTP-сообщение представляет собой обычный текст. Структура сообщения строго определена:
- Стартовая строка;
- Заголовки, передают сервисную информацию;
- Тело сообщения, представляет данные в текстовом виде.
Тело сообщения — это опциональная часть сообщения, которая может отсутствовать. Например, для некоторых GET-запросов (то есть запросов со стороны клиента, в качестве метода получения данных для которого выбран метод GET ) или для всех HEAD-запросов. Если тело сообщения присутствует, то это обозначается заголовками Content — Length или Transfer — Encoding .
Стартовая строка
Скопировать ссылку «Стартовая строка» Скопировано
Стартовая строка запроса содержит информацию о методе запроса, относительном адресе и версии протокола в формате Метод U R I H T T P / Версия . Стартовая строка ответа содержит версию протокола, код и статус ответа сервера в формате HTTP / Версия Код Статус .
Когда браузер посылает запрос на открытие главной страницы сайта, стартовая строка запроса будет такой:
GET / HTTP/1.1 GET / HTTP/1.1 Скопировать Скопировано Не удалось скопировать
Если страница существует и к ней есть доступ, то стартовая строка ответа будет такой:
HTTP/1.1 200 OK HTTP/1.1 200 OK Скопировать Скопировано Не удалось скопировать
Методы запроса описывают тип обработки данных, который клиент хочет осуществить. Доступны следующие методы:
- OPTIONS — используется для определения возможностей сервера по преобразованию данных.
- GET — используется для получения данных от сервера.
- HEAD — то же, что и GET , но не содержит тело в сообщении ответа.
- POST — используется для отправки данных на сервер.
- PUT — используется для добавления новых или изменения существующих данных на сервере.
- PATCH — то же, что и PUT , но используется для обновления части данных.
- DELETE — используется для удаления данных на сервере.
- TRACE — возвращает запрос от клиента таким образом, что в ответе содержится информация о преобразованиях запроса на промежуточных серверах.
- CONNECT — переводит текущее соединение в TCP/IP-туннель. Обычно этот метод используется для установления защищённого SSL-соединения.
Код состояния в ответе сервера содержит информацию о результате обработки данных. Существует пять классов кодов состояний:
- 1xx — обработка данных на сервере продолжается;
- 2xx — успешная обработка данных;
- 3xx — перенаправление запросов;
- 4xx — ошибка по вине клиента;
- 5xx — ошибка по вине сервера.
Самые популярные ответы сервера (коды состояния и статусы):
- 200 O K в случае успешной обработки запроса.
- 301 Moved Permanently если редирект используется на постоянной основе.
- 307 Temporary Redirect если редирект используется временно.
- 400 Bad Request если в запросе есть синтаксическая ошибка.
- 403 Forbidden если запрос успешный, но сервер его не может выполнить, поскольку пользователь не имеет достаточных прав.
- 404 Not Found если запрошенного ресурса не существует.
- 500 Internal Server Error если работа программы на сервере выдала ошибку.
Все возможные статусы описаны в реестре кодов, а так же на справочных ресурсах.
Использование заголовков
Скопировать ссылку «Использование заголовков» Скопировано
Заголовки делятся на четыре группы:
- Основные заголовки, которые могут включаться в любые сообщения клиента и сервера.
- Заголовки запроса, которые используются только в сообщениях клиента.
- Заголовки ответа, которые используются только в сообщениях сервера.
- Заголовки сущности, которые описывают данные в сообщении.
Заголовки принято группировать в соответствии со списком выше и посылать их в соответствующем списку порядке. В стандартах для каждой версии HTTP описано довольно много заголовков, но можно использовать и свои.
В заголовках указывается разная необходимая для работы веб-сервера или клиента информация. Например, есть адрес домена, к которому обращается клиент или информация об авторизации пользователя. Также заголовки могут содержать информацию о настройках кэширования на клиенте и сервере, формате передаваемых данных, языке, последних дате и времени модификации данных и так далее.
Приведём пример. Для экономии трафика часто используют сжатие данных: архивация данных перед пересылкой и разархивация после пересылки. Для этого применяют несколько алгоритмов сжатия. Например, часто применяется gzip, но наиболее интересным и современным является brotli.
Для того чтобы пользоваться сжатием, необходимо дать понять клиенту и серверу, что это вообще возможно и какой алгоритм сжатия применять. Выбор конкретного алгоритма обусловлен несколькими специфическими причинами. Например, программная поддержка на клиенте (чаще всего клиентом является браузер), реализация сжатия на сервере, особенности пересылаемых данных. В любом случае клиент должен сообщить серверу, что сжатие поддерживается, сервер должен сообщить клиенту, что данные сжаты и их необходимо распаковать перед использованием.
Например, для того чтобы сообщить серверу о поддержке сжатия в форматах gzip, br или deflate, нужно использовать заголовок:
Accept-Encoding: gzip, br, deflate Accept-Encoding: gzip, br, deflate Скопировать Скопировано Не удалось скопировать
Сервер для передачи данных в сжатом формате gzip должен послать заголовок:
Content-Encoding: gzip Content-Encoding: gzip Скопировать Скопировано Не удалось скопировать
Тело сообщения
Скопировать ссылку «Тело сообщения» Скопировано
Формат данных тела сообщения может быть нескольких типов, которые закреплены в спецификациях HTTP-протокола различных версий (HTTP/1.0 (стандарт RFC 1945), HTTP/1.1 (стандарт RFC 2616), HTTP/2 (черновик стандарта), HTTP/3 (черновик стандарта)). Чаще всего встречаются типы:
- text/html.
- application/json.
- multipart/form-data.
На практике
Скопировать ссылку «На практике» Скопировано
Источник: doka.guide
Сеть, объединяющая равноправные компьютеры. Группа компьютеров, соединенных каким-либо способом так, чтобы пользователи могли обмениваться информацией и совместно использовать оборудование
1. Сеть, объединяющая равноправные компьютеры. (одноранговая сеть) 2. Сеть, в которой выделенный компьютер содержит информацию и ресурсы, предоставляя к ним доступ. (сеть клиент-сервер) 3. Группа компьютеров, соединенных каким-либо способом так, чтобы пользователи могли обмениваться информацией и совместно использовать оборудование. (сеть) 4. Самая известная и большая в мире компьютерная сеть, объединяющая миллионы компьютеров в одну огромную сеть сетей. (Интернет) 5. Работающая на сервере программа, которая обрабатывает запросы клиентов. (служба) 6. Человек, обладающий полномочиями управления сетью. (администратор)
1 Сети нужны для совместного использования таких ресурсов, как принтеры и файлы? — да
2 Сеть крупного города можно назвать глобальной? — нет
3 Сети на основе сервера также называются рабочими группами? — нет
4 Одноранговая сеть требует установки на компьютерах серверной операционной системы? — нет
5 Если вопрос защиты данных является для предприятия важным, необходимо выбрать сеть на основе сервера? — да
6 Одноранговые сети рекомендуются, когда число компьютеров более10? — нет
7 Клиентские приложения получают доступ к совместно используемым ресурсам? — да
8 Сервер предоставляет доступ к совместно используемым реурсам? — да
9 Компьютер в одноранговой сети может функционировать только как клиент? — нет
10 В сети на основе сервера управление доступом к данным осуществляется централизованно, что облегчает их поиск и поддержку? — да модуль 2
Набор процедур, определяющий правила взаимодействия компьютеров в сети — сетевой протокол
Логическое соединение компьютеров с помощью протокола высокого уровня — сеанс
Соединение сетевых устройств, установленное на физическом уровне — связь
Блок информации, формирующийся на канальном уровне — кадр
Путь доставки сообщения, выбираемый на сетевом уровне — маршрут
Блок информации, формирующийся на транспортном уровне — пакет тест:
1 Согласно модели Osi, передача информации между уровнями внутри компьютера осуществляется:
2 Согласно модели OSI, протоколы высоких уровней логически взаимодействуют: по горизонтали, виртуально
3 Согласно модели OSI, верхний уровень пользуется услугами нижележащего уровня, передавая ему:
данные, пакеты, кадры
4 Какую информацию, согласно модели OSI, нижний уровень добавляет к данным, полученным от верхнего уровня?:
5 Какой уровень OSI отвечает за передачу неструктурированного потока битов?:
6 Какой уровень в модели OSI добавляет к передаваемым данным информацию о физических адресах (MAC-адресах) отправителя и получателя и формирует кадры?: канальный
7 Какой уровень в модели OSI определяет маршрут доставки сообщения от компьютера-отправителя к компьютеру-получателю? сетевой
8 Какой уровень в модели OSI может гарантировать приложению высокого уровня безошибочную доставку больших блоков данных, например, файлов? транспортный
9 Какой уровень в модели OSI отвечает за кодирование, сжатие и шифрование данных? представительский
10 Какой уровень в модели OSI предоставляет службы, напрямую поддерживающие приложения пользователя? прикладной тест 3
1. Что определяется выбором топологии сети? стоимость, надежность, производительность, расширяемость, управляемость
2. Способ взаимодействия компьютеров и характер распространения сигналов по сети есть:
3. Отметьте базовые топологии, на основе которых строятся сети (3 ответа)
шина, звезда, кольцо
4. Что является основным недостатком топологии «шина»?
низкая надежность сети
5. Что является основным недостатком топологии «кольцо»?
высокая стоимость сети
6. Что является основным преимуществом топологии «звезда»?
высокая надежность и управляемость сети
7. Что являетс основным недостатком множественного доступа с контролем
Похожие материалы
- Архитектура СУБД ORACLE. Файловая структура клиент-серверной технологии. Пользовательские и серверные процессы
- Создание распределенной среды. Одноранговая репликация транзакций. Одноранговые топологии. Топология с двумя участвующими базами данных
- Создание распределенной среды. Стандартная репликация транзакций. Как работает стандартная репликация транзакций
Источник: vunivere.ru
Основы функционирования веб-приложений
Аннотация: Эта лекция содержит общую информацию о функционировании веб-приложений. Здесь рассматриваются основные протоколы и механизмы, которые задействованы в процессе работы веб-приложений. Рассмотрение вопроса идет с точки зрения общих концепций и не зависит от конкретных решений или платформ.
Как работают веб-приложения
Цель лекции: сформировать концептуальное представление о функционировании веб-приложений.
Веб-приложения – это специальный вид приложений, которые работают в глобальной сети Интернет по протоколу HTTP (см. «Введение в платформу .NET Framework и ASP.NET» ). Как правило, веб-приложения не требуют установки дополнительного программного обеспечения на стороне клиента, а вся логика, в основном, выполняется на стороне сервера. Для отображения пользовательского интерфейса используется браузер – программа, способная распозновать язык разметки HTML (и сопутствующие технологии – таблицы стилей CSS, клиентский скриптовой язык программирования JavaScript и т.д.). Браузер обычно принято называть «тонким клиентом», т.е. клиентом, который содержит минимальное количество бизнес-логики.
Давайте разберемся в том, как функционирует любое веб-приложение. Необходимые компоненты для работы пользователя с веб-приложением – браузер (тонкий клиент), веб-сервер (серверная часть), протокол взаимодействия клиента и сервера (HTTP) и язык разметки для создания документов (HTML).
Основу функционирования веб-сервера и протокола HTTP мы подробнее рассмотрим в следующих лекциях, а пока остановимся на концептуальном представлении. Для того, чтобы веб-приложение стало доступно, его необходимо разместить в рамках веб-сервера (специальная программа, которая обрабатывает запросы из сети).
После этого приложение получит свой уникальный адрес в рамках протокола HTTP (например, http://www.myapplication.com/page1.html). Используя этот адрес пользователь может обратиться к приложению. Для этого он должен запустить браузер (клиентское приложение) и ввести в адресной строке адрес приложения. В этот момент браузер сгенерирует запрос к серверу и отправит его, используя протокол HTTP.
В момент, когда сервер примет этот запрос, он сможет распознать, что именно требуется от него на основе полученного запроса. Используя эти данные он сгенерирует ответ и отправит его обратно клиенту также используя протокол HTTP. Обычно ответ содержит гипертекстовую разметку HTML, содержащую структуру документа, который передается пользователю.
После того, как браузер получит ответ в виде HTML-документа, он немедленно отобразит его пользователю. Таким образом, было совершено взаимодействие клиента и сервера. Зачастую документ HTML содержит ссылки на изображение, другие медиа-файлы, таблицы стилей или клиентские сценарии. В этом случае браузер генерирует еще несколько аналогичных запросов к веб-серверу. Однако, в этом случае веб-сервер передает клиенту уже не HTML-документ, а соответствующие запрашиваемые ресурсы (изображения, таблицы стилей, клиентские сценарии и т.д.).
В самом простейшем случае на сервере может быть сохранен готовый документ HTML, который по запросу будет передаваться пользователю. Это – так называемый, статический документ. В этом случае он просто считывается с жесткого диска и передается клиенту. Однако, такой сценарий работы в глобальной сети становится все более редким.
Другой подход – генерация кода HTML в процессе обработки запроса от клиента. Этот подход позволяет сделать веб-приложение более интерактивным, отзывчивым на действия клиента и создающее впечатления настоящего приложения, а не простой загрузки HTML-документов.
Таким образом, мы, имея возможность генерировать HTML-код страницы, можем влиять на ту информацию, элементы управления и другие аспекты интерфейса, которые увидит пользователь. По сути, задача веб-приложения и заключается в том, чтобы генерировать нужный HTML-код, в зависимости от действий пользователя. Однако, возможности веб-приложений могут не ограничиваться только генерацией разметки HTML – они могут генерировать изображения, клиентские сценарии, таблицы стилей и другие ресурсы, которые могут быть загружены пользователем. Тем не менее, основным сценарием является все-таки генерация конечного документа HTML.
Как уже говорилось ранее, для взаимодействия клиента и сервера используется протокол HTTP (который более детально будет рассмотрен в последующих лекциях). Сейчас важно понять, что этот протокол работает по схеме «запрос-ответ». В момент, когда клиент хочет обратиться к серверу, он генерирует запрос, который отправляется серверу.
Сервер обрабатывает этот запрос и подготавливает ресурсы, которые будут отправлены клиенту. После этого сервер генерирует ответ, в котором содержатся все необходимые данные и отправляет клиенту. Работа веб-приложений заключается в формировании необходимых данных как раз в момент подготовки ресурсов на сервере. Обычно в этот момент запускается некоторый программный код, который содержит определенную бизнес логику. Схему работы типичного веб-приложения схематически можно представить следующим образом (зеленым цветом обозначены действия, которые выполняются на клиентской стороне, а синие – на серверной).
Веб-приложения существенно отличаются от настольных приложений. Последние запускаются на компьютере клиента и выполняют свой код именно там. Поэтому настольные приложения зачастую обладают более богатым и отзывчивым пользовательским интерфейсом и позволяют реализовывать более богатые сценарии.
По сравнению с настольными приложениями, веб-приложения обладают более ограниченными возможностями по формированию пользовательского интерфейса и клиентской функциональности. По этой причине за последнее время сложился стереотип о том, что серьезные приложения (например, бизнес-приложения) – это, как правило, настольные приложения.
Однако, развитие веб-технологий доказало, что веб-приложения также могут реализовывать богатые сценарии и успешно конкурировать с настольными приложениями. Кроме того, за последние несколько лет очень активно развиваются технологии, позволяющие сделать веб-приложения еще более интерактивными. К ним относятся технология AJAX (будет рассмотрена в рамках курса), которая на основе клиентских сценариев JavaScript может сделать взаимодействие более интерактивным. Также существует ряд технологий, которые добавляют интерактивности приложению за счет внедрения в браузер специальных модулей (плагинов), которые могут отображать специальные типы файлов с более богатыми возможностями. К таким технологиям в первую очередь относятся технологии Silverlight и Flash.
Однако, несмотря на то, что существует ряд технологий, упрощающих создание динамичных веб-приложений, их разработка по прежднему остается довольно трудоемкой задачей. Разработка веб-приложений существенно отличается от разработки настольных систем. Этому есть две главные причины:
- Веб-приложения исполняются на сервере. Весь программный код исполняется в рамках веб-сервера, а клиенту доставляется уже готовая разметка HTML, которая отображается внутри браузера.
- Веб-приложения не хранят состояния. По-сути, сервер «забывает» про пользователя после того, как обработал его запрос.
Оба этих фактора существенно влияют на процесс разработки веб-приложений. Из-за этого при построении любого веб-приложения приходится решать типичные задачи – способы хранения информации о пользователе, организация сеансов работы пользователя, способы переходов от страницы к странице, механизмы оптимизации эффективности (например, кэширование) и др.
При реализации каждого веб-приложения разработчику придется столкнуться с этими проблемами и решить их. Поскольку набор этих задач является достаточно стандартным и одинаково решается для большинства веб-приложений, то его реализация вынесена в отдельные технологии, которые называются технологиями для разработки веб-приложений. К таким технологиям относятся технология Microsoft ASP.NET, PHP, Ruby on Rails и др. В них, фактически, содержатся все компоненты, необходимые для реализации веб-приложений и учитывающие их специфику. Далее в рамках данного курса мы будем рассматривать разработку веб-приложений с позиции платформы Microsoft ASP.NET.
Однако, несмотря на те преимущества настольных приложений, которые мы рассмотрели ранее, веб-приложения также обладают своими преимуществами. Основное преимущество веб-приложений заключается в процессе развертывания приложения, т.е. установке приложения конечному клиенту.
Если настольное приложение необходимо установить на каждое рабочее место где оно будет использоваться, то веб-приложение нужно разместить на сервере и дать ссылку на него всем пользователям. Особенно актуален данный аспект там, где присутствует большое количество рабочих мест. Кроме того, в случае обновления программного кода, веб-приложения также имеют преимущество – для их обновления требуется только обновить код на сервере. При этом настольное приложение потребовалось бы обновлять на каждом рабочем месте.
Краткие итоги
Веб-приложения работают на сервере и исполняются в рамках веб-сервера (специальной программы, обрабатывающей запросы). Взаимодействие клиента и сервера осуществляется про протоколу HTTP в рамках схемы «запрос-ответ». Вся логика веб-приложения размещается на сервере. Из-за этого появляются дополнительные проблемы при разработке веб-приложений.
Настольные приложения имеют более богатый пользовательский интерфейс, но веб-приложения легче разворачивать и обновлять (особенно, если имеется большое количество рабочих мест). Пользовательский интерфейс веб-приложений может стать более интерактивным, если использовать дополнительные инструменты – клиентские сценарии JavaScript, а также приложения Silverlight, Flash и др.
Источник: intuit.ru