Computer Science
August 1, 2021

BCS: Сеть

BCS - Base Computer Science. В рамках данной рубрики заметок буду кратко рассматривать какие-то определения, что часто могут встретиться на собеседованиях или в работе. При этом сюда будут входить вопросы скорее не по Android, а по всему тому, что его окружает, то есть некие общие вопросы на пересечении разных сфер.

Общие определения

Сетевой протокол - стандарт передачи и обработки информации. Кроме сетевых протоколов бывают и почтовые протоколы (SMTP, POP, IMAP и др), протоколы передачи файлов (FTP) и другие.

IP и TCP - два разных протокола, которые связывают друг с другом. Часто употребляются в комбинации сразу нескольких протоколов, каждый из которых выполняет операции на своем уровне.

TCP - отвечает за создание интернет-пакетов и их обратную сборку в нужном порядке в месте получения, а так же проверяет целостность информации.

IP - используется для доставки по нужному адресу, каждый отправленный пакет содержит адрес доставки, отвечает за маршрутизацию пакета к указанному компьютеру.

UDP - для передачи малых кусков информации, не гарантирует доставку пакетов в нужной последовательности и не дублирует передачу утерянных пакетов, но выше скорость передачи и меньше потребление системных ресурсов.

Socket - это программный интерфейс. Это абстрактное понятие, которое, в большинстве случаев, используется для коммуникации программ в сети (но не только).

WebSocket - это протокол (какой-либо заранее оговоренный порядок) обмена данными (как, например, http, ftp, ssl и т.д.). Этот протокол идет поверх (передается посредством) протокола TCP.

SSL (Secure Sockets Layer) - тип цифровой безопасности, которая позволяет зашифровать связь между веб-сайтом и веб-браузером.

TLS (Transport Layer Security) - обеспечивает конфиденциальность данных так же, как и SSL.

SSL/TLS handshake - ряд шагов, благодаря которому клиент и сервер инцируют связб, проверяют друг друга и начинают передачу данных через туннель SSL/TLS.

REST (REpresentational State Transfer) - термин, который первоначально введен Роем Филдингом (Roy Fielding), кто являлся одним из создателей протокола HTTP. Отличительной особенностью сервисов REST является то, что они позволяют наилучшим образом использовать протокол HTTP.

GraphQL - синтаксис, который описывает как запрашивать данные, и, в основном, используется клиентом для загрузки данных с сервера. Один из подходов проектирования API, альтернатива REST.

HTTP

HTTP-протокол - пользователь иницирует соединение к серверу для запроса информации, а сервер ожидает соединение для получения запроса, обрабатывает запрос и возвращает обратно сообщение с результатом. Работает совместно с протоколом TCP.

HTTPS - безопасное расширение HTTP устанавливающие и настраивающие SSL/TLS-сертификат

Метод HTTP — указывает на основную операцию над ресурсом. Методы бывают (подробнее о методах позже, после идемпотентности):

  • GET
  • POST
  • HEAD
  • OPTIONS
  • PUT
  • PATCH
  • DELETE
  • TRACE
  • CONNECT

Коды состояния бывают:

  • 1xx - Informational
  • 2xx - Success
  • 3xx - Redirection
  • 4xx - Client error
  • 5xx - Server error

Структура HTTP-сообщения

1. Стартовая строка (Starting line) определяет тип сообщения

  • Для запроса: Метод URI HTTP/Версия
  • Для ответа: HTTP/Версия Код состояние Пояснение

2. Заголовки (Headers) - тело сообщения, параметры передачи и прочее. Виды заголовком в порядке рекомендованной очередности посыла:

  • General headers - могут включаться в любое сообщение клиента и сервера;
  • Request headers - используются только в запросах клиента;
  • Response headers - только для ответов от сервера;
  • Entity headers - сопровождают каждую сущность сообщения.

3. Тело сообщения (Message Body) - отделяется от заголовка пустой строкой, это непосредственно данные сообщения

Идемпотентность, безопасность и методы HTTP

Идемпотентность - свойство объекта или операции при повторном ее применении к объекту давать тот же результат, что и при первом. То есть идемпотентная операция - действие, многократное повторение которого эквивалетно однократному.

Безопасный HTTP-метод - метод не меняющий состояние сервера.

Идемпотентный и небезопасный метод - сколько бы не повторялся запрос, только первый изменит состояние системы, а остальные состояние системы не меняют

Идемпотентный и безопасный метод - многократное повторение запроса вернет одно и то же состояние системы

Самое использование HTTP-методов при проектировании Rest-API - НЕ ГАРАНТИРУЕТ идемпотентность, разработчик легко может ее нарушить.

Теперь конкретно по основным характеристикам методов:

1. CONNECT - запускает двустороннюю связь с запрошенным ресурсом, можно использовать для открытия туннеля

2. HEAD - запрашивает заголовки. Такой запрос может быть выполнен перед загрузкой большого ресурса, например, для экономии пропускной способности.

3. TRACE - выполняет проверку обратной связи по пути к целевому ресурсу, предоставляя полезный механизм отладки.

4. OPTIONS - используется для описания параметров соединения с целевым ресурсом.

5. GET - запрашивает представление указанного ресурса, запросы должны только получать данные. ВАЖНО: GET-запрос имеет ограниченную длину

6. POST - предназначен для отправки данных на сервер. Тип тела запроса указывается в заголовке Content-type. ВАЖНО: в отличие от GET - метод POST не имеет ограничений по длине и соответственно не вызовет ошибку и условно не кэшируется.

7. PUT - создаёт новый ресурс или заменяет представление целевого ресурса, данными представленными в теле запроса. ВАЖНО: PUT в отличие от POST является идемпотентным

8. PATCH - имеет поведение типичного update-метода в CRUD'ах. ВАЖНО: PATCH может как быть идемпотентным, так и нет, в отличие от PUT, который всегда идемпотентен.

9. DELETE - удаляет указанный ресурс. ВАЖНО: корректно реализованный DELETE является идемпотентным.

В основном материал брался:

https://ru.wikipedia.org/wiki/HTTP

https://developer.mozilla.org/ru/docs/Web/HTTP/Methods/CONNECT