Варианты взаимодействия:
- Клиент-сервер (сервер один, клиентов много)
- Одноранговая (peer-to-peer) сеть
Самым популярным протоколом передачи данных между клиентом и сервером (и наоборот) является http. Основой http является технология "клиент-сервер", т.е. предпалагается существоване:
-
Потребителей(клиентов), которые иницируют соединение и посылают запрос;
-
Поставщиков(серверов), которые ожидают соединения для получения запроса, производят необходимые действия и возвращают обратно с результатом
Структура протокола
- Стартовая строка - определяет тип сообщения
- Заголовки (Headers) - харахтеризуют тело сообщения, параметры передачи
- Тело сообщения( Message Body) - данные сообщения. Отделены от заголовка пустой строкой. Могут отсутвовать
Стартовая строка запроса:
Метод URI HTTP/Version
GET /wiki/HTTP HTTP/1.0
Host: ru.wikipedia.org
Стартовая строка ответа от сервера:
HTTP/Version Code Status Description
HTTP/1.0.200 OK
Заголовки
Заголовик HTTP - это строки в http сообщении, содержащие разделённую двоеточием пару параметр-значение. Формат заголовков соответсвует общему фомрату заголовков текствовых сетевых сообщений ARPA(см RFC 822). Заголовки должны отделяться от тела сообщений хотя бы одной пустой строкой
Пример:
Server Apache/2.2.11 (Win32) PHP/5.3.0
Last-Modified: Sat, 16 Jan 2010 21:16:42 GMT
Content-Type: text/plain; charset=windows-1251
Content-Language: ru
Типы заголовков:
1.General Headers-могут включаться в любое сообщение клиента и сервера;
2.Request Headers-используются только в запросах клиента;
3.Response Headers-только для ответов от сервера;
4.Entity Headers-сопровождают каждую сущность сообщения
Тело сообщения
message-body = entity-body
<entity-body закодированное слово
Transfer_Encoding>
Пример запроса на сервер:
GET wiki/страница/HTTP/1.1
Host: ru.wikipedia.org
User-Agent:Mozila/5.0 (X11;U;Linux i 686; ru; rv:1.9b5) Gecko/2008050509 Firefox/3.05b5
Accept : text/html
Connection: close
(Пустая строка)_
Пример ответа клиенту:
HTTP/1.1 200 OK
Date:Web,11 Feb 2009 11:20:59 GMT
Content-Language: ru
Content-Type: text/html; charset=utf-8
Content-Length: 1234
Connection: close
(пустая строка)
(запрошенная страница в html)
Методы
GET-запрос содержимого
GET /path/resource?param1=value1¶m2=value2 HTTP/1.1
POST-отправка сущностей к определенному ресурсу.Может вызывать изменение состояния.
PUT-заменяет все текущие представления ресурса данными запроса.
PATCH-аналогичен PUT, но может работать с частичным изменением.
DELETE-удаление
Коды состояния
1xx: Informational (информационные):
100 Continue («продолжай»);
101 Switching Protocols («переключение протоколов»);
2xx: Success (успешно):
200 OK («хорошо»);
201 Created («создано»);
202 Accepted («принято»);
3xx: Redirection (перенаправление):
300 Multiple Choices («множество выборов»;
301 Moved Permanently («перемещено навсегда»);
4xx: Client Error (ошибка клиента):
400 Bad Request («неправильный, некорректный запрос»);
404 Not Found («не найдено»);
5xx: Server Error (ошибка сервера):
500 Internal Server Error («внутренняя ошибка сервера»;
501 Not Implemented («не реализовано»);
502 Bad Gateway («плохой, ошибочный шлюз»);
Rest (Respresentational State Transfer)-архитектурный стиль взаимодействия компонентов
распределенного приложения в сеть по модели клиент-сервер
Особенности Rest
- Каждая сущность должна иметь уникальный идентификатор-URI
- Сущности должны быть связаны между собой
- Для чтения и изменения данных должны использоваться стандартные методы
- Должна быть поддержка нескольких типов ресурсов
- Взаимодействие должно осуществляться без состояние
Строго заданный формат URI GET /book/ - получить список всех книг GET /book3/ - получить книгу номер 3 POST /book/ - добавить книгу (данные в теле запроса) PUT /book/3 - изменить книгу(данные в теле запроса) DELETE /book/3 - удалить книгу