HTTP запрос и ответ
Итак, вспомним.
HTTP – это протокол прикладного уровня для распределённых информационных систем, который является основной для передачи данных во всемирной сети.
REST – это архитектурный стиль для распределённых вычислений, который работает в сочетании с HTTP.
REST – это упрощённая альтернатива веб-сервисам, использующим простой протокол доступа к объектам (SOAP) или язык описания веб-служб (WSDL). Сегодня REST – это наиболее распространённый способ вызова веб-сервисов облачными приложениями.
Существует несколько характеристик REST-сервисов:
- REST использует архитектуру, основанную на pull-запросах (request/pull-basedarchitecture). Сервера заботятся об управлении данными, а клиенты получают доступ к данным с серверов, им не нужно хранить данные.
- REST использует архитектуру stateless. Каждый запрос должен содержать полную информацию для понимания запроса.
- REST использует стандартный набор методов.
- REST не связан с каким-либо конкретным форматом сообщений. Вы можете, например, выбрать такой формат как JavaScriptObjectNotation (JSON), который уменьшает объём передаваемых данных, что приводит к повышению производительности сети.
- REST поддерживает безопасные соединения. Когда требуется безопасная коммуникация REST использует протокол HTTPS.
HTTP функционирует как протокол запроса-ответа в модели клиент-серверных вычислений.
HTTP-запрос содержит строку запроса, заголовки и тело сообщения. Строка запроса содержит HTTP-метод и относительный URI (имя сервиса и имя ресурса). Существует три типа заголовков – общие заголовки, заголовки запросов и заголовки ответов. Общие заголовки могут быть частью запроса и/или ответа. Заголовки содержат метаданные о транзакции. Например, с помощью заголовков можно указать тип содержимого, которое сервер должен возвращать. Тело сообщения содержит фактическое сообщение.
request = request-line ; *(( general-header ; | request-header ; | entity-header ) CRLF); CRLF [ message-body ] ;
Ответ HTTP содержит строку состояния, заголовки и тело сообщения. Строка состояния содержит код состояния и сообщение о состоянии. Код состояния – это число, представляющее состояние, используемое для программирования, а сообщение о состоянии содержит читаемый человеком статус. Например, при успешном ответе строка состояния будет 200 OK, где 200-код состояния, а OK-сообщение о состоянии.
response = status-line ; *(( general-header ; | response-header ; | entity-header ) CRLF) ; CRLF [ message-body ] ;
Коды состояния позволяют обрабатывать различные сценарии, с которыми может столкнуться ваш код, и позволяют выполнять отладку кода. Некоторые из наиболее распространённых кодов состояния приведены в таблице:
Код |
Сообщение состояния |
Возможные причины |
200 | ОК | Транзакция завершилась успешно |
201 | Created | Транзакция завершилась успешно и создана запись. |
204 | No Content | Транзакция успешно завершена, но нет никакого полезного ответа. |
301 | Moved Permanently | Запрошенный ресурс был перемещён на другой сервер/местоположение, поэтому возвращается новый URI.
Этот код состояния возвращается только в том случае, если используется запрос, отличный от HEAD или GET. |
302 | Found | Запрошенный ресурс временно находится в другом расположении/сервере, поэтому возвращается временный URI.
Этот код состояния возвращается только в том случае, если используется запрос, отличный от HEAD или GET. |
400 | Bad Request | Отправлен не правильный запрос. |
401 | Unauthorized | Клиент не прошёл проверку подлинности. |
404 | Not Found | Ресурс, к которому пытаются получить доступ, не существует. |
500 | Internal Server Error | Сервер столкнулся с неожиданным состоянием, которое помешало ему обработать запрос. |
503 | Service unavailable | Сервер не смог обработать запрос из-за временной перегрузки или из-за того, что он находится в процессе обслуживания. |