75 lines
8.4 KiB
Markdown
75 lines
8.4 KiB
Markdown
## Содержание
|
|
- [Введение](#Введение)
|
|
- [Клиент-серверное взаимодействие. Протокол 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). |