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