## Содержание - [Введение](#Введение) - [Клиент-серверное взаимодействие. Протокол HTTP.](#Клиент-серверное%20взаимодействие.%20Протокол%20HTTP.) - [HTTP](#HTTP) - [Структура запроса HTTP](#Структура%20запроса%20HTTP) - [Структура ответа HTTP](#Структура%20ответа%20HTTP) - [Методы HTTP](#Методы%20HTTP) - [Коды состояния](#Коды%20состояния) - [Заголовки HTTP](#Заголовки%20HTTP) - [URI, URN и URL](#URI,%20URN%20и%20URL) - [REST](#REST) ## Введение В основном все держится на 4 вещах: - [Hypertext Transfer Protocol (HTTP)](#HTTP) - предназначен для передачи гипертекста между клиентом и сервером - Hypertext Markup Language (HTML) - язык разметки гипертекста - Cascade StyleSheets (CSS) - язык описания внешнего вида HTML-документов - JavaScript - язык для написания динамических сценариев, выполняемых на стороне клиента ## Клиент-серверное взаимодействие. Протокол HTTP. ### HTTP Сам по себе HTTP - протокол прикладного уровня. В его основе лежит технология "клиент-сервер". Он может использоваться в качестве "транспорта" для других протоколов прикладного уровня. Основной объект манипуляций этого протокола - ресурс, на который указывает [URI](#URI,%20URN%20и%20URL). Обмен сообщениями в этом протоколе идет по схеме "запрос-ответ". Сам по себе протокол не сохраняет состояние (stateless-протокол), поэтому для реализации сессий используется cookies. #### Структура запроса HTTP Первая строка запроса HTTP является стартовой, в ней содержится основное описание необходимого действия (команда). При ее составлении через пробел указывают три основные для протокола вещи: [метод](#Методы%20HTTP), [URI](#URI,%20URN%20и%20URL) и версию протокола HTTP (в формате HTTP/Версия). За первой строкой следует следующий раздел - заголовки. Этот раздел содержит, как ни странно, [заголовки](#Заголовки%20HTTP). Последним разделом запроса является тело сообщения. Чаще всего в запросе тело остается пустым. В теле сообщения может находится что угодно, что необходимо передать с помощью протокола на другую сторону. Вся информация о теле, необходимая другой стороне, должна быть указана в заголовках. #### Структура ответа HTTP Ответ мало чем отличается от [запроса](#Структура%20запроса%20HTTP). Единственным отличием является стартовая строка. Эта строка составляется тем же образом, что и стартовая строка запроса, перечисляя через пробел основную информацию запроса: версию протокола HTTP (в формате HTTP/Версия), [код состояния](#Код%20состояния) и пояснение кода состояния. По сути, в пояснении можно указать что угодно, но лучше придерживаться стандартных шаблонов сообщений. #### Методы HTTP Методов HTTP довольно много, поэтому перечислим только используемые чаще всего. - OPTIONS - определение возможностей сервера - GET - получение данных с ресурса (запрос содержимого ресурса) - HEAD - аналог GET, но в ответе не передается (отсутствует) тело - POST - передача данных ресурсу - PUT - загрузка содержимого запроса на указанный [URI](#URI,%20URN%20и%20URL) - DELETE - удаление данных с сервера #### Коды состояния Коды состояния в основном состоят из трёх цифр. Все коды состояния делятся на 5 классов, в соответствии с которыми ставится первая цифра кода. - 1 - Informational - информационный - 2 - Success - успешно - 3 - Redirection - перенаправление - 4 - Client error - ошибка клиента - 5 - Server error - ошибка сервера #### Заголовки HTTP Заголовки используются для передачи определенных значений с помощью протокола. В некотором роде, можно думать о заголовках как о входящих переменных. Все они передаются в формате ключ:значение. Заголовки делятся на 4 группы: - General Headers - могут включаться в любое сообщение клиента и сервера - Request Headers - используется только в запросах клиента - Response Headers - используется только в запросах сервера - Entity Headers - сопровождают любую сущность сообщения ### URI, URN и URL > **URI (Uniform Resource Identifier)** - уникальный идентификатор ресурса - символьная строка, позволяющая идентифицировать ресурс. Строится по форме <схема>:<идентификатор>. Идентификатор определяется в зависимости от схемы. > **URL (Uniform Resource Locator)** - URI, позволяющий определить местоположение ресурса. Может представлять из себя абсолютную ссылку (https://), относительную ссылку (../task.html) и тп. > **URN (Uniform Resource Name)** - URI, содержащий единообразное имя ресурса (не указывает на его местонахождение). Строится по способу, подобному URI, но начинается с urn, и только после него идет уже сама схема с идентификатором. ### REST > **REST (Representation State Transformer)** - передача состояния представления - подход к архитектуре сетевых протоколов, обеспечивающих доступ к информационным ресурсам. Он описывает взаимодействие между клиентом и сервером, а также между front-end и back-end частями. Основные концепции REST: - данные должны передаваться в виде небольшого числа стандартных форматов (к примеру, HTML, XML, JSON) - сетевой протокол должен поддерживать кеширование, не должен зависеть от сетевого слоя, не должен сохранять информацию о состоянии между парами "запрос-ответ" Существует подход, противоположный REST, который основан на вызове удаленных процедур (RPC - Remote Process Call).