web и сети Flashcards
https://github.com/RomE-HK/QA_Interview_Questions/blob/main/MiddleQA.md
REST - расшифровка
Representational State Transfer
REST - суть
REST (Representational State Transfer) — это архитектурный стиль. В отличие от SOAP, который является протоколом, он не подчиняется строгим стандартам, более гибкий, простой и легковесный.
В основе REST лежат стандартные HTTP-методы (GET, POST, PUT, DELETE), а основным форматом данных для него является JSON. Также он позволяет передавать данные в виде текста, XML, HTML и другие.
SOAP - расшифровка
Simple Object Access Protocol
SOAP - суть
SOAP (Simple Object Access Protocol) - это протокол обмена данными, основанный на XML, который используется для передачи сообщений между приложениями. Он более строгий и более сложный для использования, чем REST.
Отличия SOAP и REST
SOAP | REST
Протокол | архитектурный стиль
Any transport protocol | HTTPS only
XML only | JSON, HTML, plain text, XML
Slower | Faster (message size)
Плохо масштабируется | Хорошо масштабируется (stateless)
Шифрование через WS-Secure | Шифрование через HTTPS
SOAP - legacy and private APIs
REST - modern applications and public APIs
Статус коды 1XX
1xx: Информационные
- 100 Continue: Промежуточный ответ, указывающий, что начальная часть запроса принята и клиент может продолжать отправку данных.
- 101 Switching Protocols: Сервер соглашается переключить протоколы в соответствии с запросом клиента, отправленным в заголовке Upgrade.
Статус коды 2ХХ
2xx: Успешные
- 200 OK: Стандартный ответ для успешных HTTP-запросов. Ресурс успешно обработан и передан в теле ответа.
- 201 Created: Запрос был успешно выполнен, и в результате был создан новый ресурс.
- 204 No Content: Запрос успешно обработан, но в ответе нет содержимого.
Статус коды 3XX
3xx: Перенаправления
- 301 Moved Permanently: Запрашиваемый ресурс был окончательно перемещен на URL, указанный в заголовке Location. Клиент должен использовать этот новый URL в будущем.
- 302 Found: Запрашиваемый ресурс временно находится по другому URI, указанному в заголовке Location.
- 304 Not Modified: Ресурс не был изменен с момента последнего запроса клиента, использующего условные заголовки типа If-Modified-Since или If-None-Match.
Статус коды 4XX
4xx: Ошибки клиента
- 400 Bad Request: Сервер не может обработать запрос из-за неверного синтаксиса.
- 401 Unauthorized: Для доступа к запрашиваемому ресурсу требуется аутентификация.
- 403 Forbidden: Сервер понял запрос, но отказывается его авторизовать.
- 404 Not Found: Запрашиваемый ресурс не найден на сервере.
- 405 Method Not Allowed: Метод, указанный в запросе, не поддерживается для данного ресурса.
- 418 I’m a Teapot: Сервер не может приготовить кофе, т.к. он чайник
Статус коды 5XX
5xx: Ошибки сервера
- 500 Internal Server Error: Общая ошибка сервера, когда сервер сталкивается с непредвиденными обстоятельствами.
- 501 Not Implemented: Сервер не поддерживает функциональные возможности, необходимые для обработки запроса.
- 502 Bad Gateway: Сервер, выступая в роли шлюза или прокси, получил неверный ответ от вышестоящего сервера.
- 503 Service Unavailable: Сервер временно не может обработать запрос из-за перегрузки или технического обслуживания.
- 504 Gateway Timeout: Шлюз или прокси-сервер не получил вовремя ответ от вышестоящего сервера для завершения запроса.
HTML
HTML (HyperText Markup Language) - язык разметки веб-страниц на основе тегов и атрибутов.
CSS
CSS (Cascading Style Sheets - язык для описания внешнего вида и форматирования документа.
JavaScript
JavaScript (JS) — это легковесный интерпретируемый язык программирования с функциями первого класса.
Мультипарадигменный язык программирования. Поддерживает объектно-ориентированный, императивный и функциональный стили. Часто используется как встраиваемый язык для программного доступа к объектам приложений. Наиболее широкое применение находит в браузерах как язык сценариев для придания интерактивности веб-страницам.
Что такое клиент-серверная архитектура?
Клиент-серверная архитектура - вычислительная или сетевая архитектура, в которой задания или сетевая нагрузка распределены между поставщиками услуг, называемыми серверами, и заказчиками услуг, называемыми клиентами.
Фактически клиент и сервер - это программное обеспечение. Обычно эти программы расположены на разных вычислительных машинах и взаимодействуют между собой через вычислительную сеть посредством сетевых протоколов, но они могут быть расположены также и на одной машине. Программы-серверы ожидают от клиентских программ запросы и предоставляют им свои ресурсы в виде: данных (например, загрузка файлов посредством HTTP, FTP, BitTorrent, потоковое мультимедиа или работа с базами данных); сервисных функций (например, работа с электронной почтой, общение посредством систем мгновенного обмена сообщениями или просмотр web-страниц во всемирной паутине).
Поскольку одна программа-сервер может выполнять запросы от множества программ-клиентов, ее размещают на специально выделенной вычислительной машине, настроенной особым образом, как правило, совместно с другими программами-серверами, поэтому производительность этой машины должна быть высокой. Из-за особой роли такой машины в сети, специфики ее оборудования и программного обеспечения, её также называют сервером, а машины, выполняющие клиентские программы, соответственно, клиентами.
Как работает данная модель простыми словами?
- Клиент (браузер, мобильное приложение) отправляет HTTP-запрос к серверу. Пользователь ввел запрос в поисковую строку интернет-магазина
- Сервер обрабатывает запрос и присылает HTTP-ответ клиенту. Сервер магазина обработал запрос и обратился к базе данных в поиске искомого товара (см. шаг 3). После этого сервер вернул массив карточек товаров в ответе и пользователь увидел их на клиенте (в браузере).
- Если необходимо получить данные, которые сохраняются в базе данных, то сервер обращается к базе и получает ответ от нее. Сервер базы данных обработал запрос и выдал серверу идентификаторы товаров, которые подходят поисковому запросу.
Основные характеристики:
- Разделение функций: Отвечает за представление данных пользователю и взаимодействие с пользователем, в то время как сервер занимается обработкой данных, управлением ресурсами и выполнением задач.
- Централизованное управление: Данные и управляющая логика часто централизованы на сервере, что облегчает обновление, обслуживание и управление безопасностью.
- Масштабируемость: Архитектура позволяет легко добавлять, обновлять и масштабировать серверные ресурсы в ответ на изменяющиеся требования без необходимости изменения клиентской части.
- Гибкость: Могут взаимодействовать с различными серверами, а сервера могут обслуживать различных клиентов, что обеспечивает высокую степень гибкости и повторное использование компонентов.
Компоненты:
- Клиент (Client): Приложение или устройство, используемое пользователем для доступа к сервисам и ресурсам сервера. Клиенты инициируют запросы к серверам.
- Сервер (Server)^ Мощная система или программное обеспечение, обрабатывающее запросы клиентов, выполняет обработку данных, управляет ресурсами (например, базами данных) и предоставляет различные сервисы.
- Сеть (Network): Среда передачи данных, которая соединяет клиентов и серверы, обычно через Интернет или локальную сеть (LAN).
Типы клиент-серверных архитектур:
- Одноуровневая (1-Tier): Клиент и сервер находятся на одной машине, и нет сетевого взаимодействия.
- Двухуровневая (2-Tier): Прямое взаимодействие между клиентом и сервером, например, клиентское приложение взаимодействует напрямую с базой данных на сервере.
- Трёхуровневая (3-Tier): Включает промежуточный уровень, например, приложение сервера, которое действует как посредник между клиентом и сервером базы данных, облегчая процесс обработки запросов.
- Многоуровневая (N-Tier): Более сложная структура с несколькими уровнями, которые могут включать балансировщики нагрузки, сервера приложений, сервера баз данных, сервера кэширования и т.д.
Клиент-серверная архитектура остаётся основным выбором для разработки современных приложений благодаря своей гибкости, масштабируемости и эффективности в управлении ресурсами и обработке данных.
Что может выступать в качестве клиента?
- Браузер
- Десктопное приложение
- Мобильное приложение
Какие протоколы передачи данных знаете?
- IP
- TCP
- UDP
- HTTP
- DNS
- SSH
- FTP
- SSL/TLS
- WebSockets
Internet Protocol — IP
IP отвечает за поиск компьютеров в сети по их IP-адресам. Ещё он предоставляет стратегию маршрутизации, то есть составляет оптимальный маршрут для передачи данных.
Данные в интернете передаются IP-пакетами. У каждого пакета есть заголовок и данные. В заголовке находятся IP-адреса источника и пункта назначения. Данные — это само содержимое, например, часть веб-страницы.
Работу IP можно сравнить с почтовым отделением: протокол направляет IP-пакеты по интернету так же, как почта рассылает письма по всему миру. При доставке почта использует пункты передачи: письмо из отделения сначала попадает на поезд, потом на грузовик и в конце вручается адресату. В интернете тоже есть «пункты передачи» — их называют маршрутизаторами. Цель маршрутизатора — отправить пакет в пункт назначения по самому короткому пути. Если всё идёт хорошо, пакет прибывает на ближайший к получателю маршрутизатор, который точно знает, куда его отправить. Но бывает и так, что какой-то из маршрутизаторов на пути взломан или вышел из строя, и тогда выбирается другой путь.
DNS
Уникальный IP-адрес есть у каждого домена. Он записывается в виде четырёх чисел от нуля до 255 — например, 74.125.20.113.
DNS связывает IP-адрес с понятным для людей доменным именем, например, 178.79.181.169 превращается в htmlacademy.ru
Принцип работы DNS похож на поиск и вызов контактов в телефоне. Вряд ли кто-то помнит 1317а друзей — да это и необязательно, ведь они хранятся в списке контактов. Когда мы хотим кому-то позвонить, то просто находим нужное имя и нажимаем кнопку вызова — в этот момент начинается соединение, но не по имени, а по 1317у телефона.
DNS-сервер — это и есть «список всех контактов», то есть IP-адресов, которые там хранятся. Каждому IP-адресу присвоен домен. И когда мы вводим в строке браузера имя домена, то происходит запрос к DNS-серверу — запрашивается IP-адрес.
SSL/TLS
SSL — криптографический протокол шифрования запросов и ответов, он нужен для безопасного перемещения данных по интернету, а TLS — его продвинутая версия. SSL уже почти не используют, но это название было таким популярным, что его до сих пор употребляют, а любой SSL-сертификат у хостинг-компаний — TLS-сертификат.
TCP и UDP
Оба протокола отвечают за передачу данных и работают поверх IP, но с небольшой разницей. TCP доставляет данные без потерь, поэтому его используют для передачи фотографий, сообщений и другой важной информации. А вот UDP не гарантирует доставку, но зато он гораздо быстрее. Его используют, когда скорость важнее надёжности, например, при передаче аудиосообщений или видеотрансляциях.
HTTP и HTTPS
HTTP и HTTPS предназначены для передачи данных и в итоге пользователи могут просматривать веб-страницы. На самом деле HTTPS — это не отдельный протокол, а расширение HTTP. Он безопаснее, так как использует SSL/TLS для шифрования обычных запросов и ответов.
HTTP
HTTP — один из самых используемых протоколов в интернете, поэтому посмотрим подробнее, как он работает.
Протокол работает в формате запрос-ответ с двумя участниками общения:
клиент — формирует запросы и обрабатывает ответы;
сервер — обрабатывает запросы и формирует ответы.
Клиент делает запрос на сервер для передачи каждого ресурса: файлов HTML, CSS, JavaScript, изображений или видеофайлов. Затем сервер отвечает на запрос, отправляя ресурс.
Для каждого запроса и ответа открывается своё TCP-соединение. При каждом соединении происходит трёхстороннее «рукопожатие»: клиент и сервер трижды обмениваются пустыми пакетами данных, чтобы удостовериться в существовании друг друга и готовности к работе с данными.
Трёхстороннее «рукопожатие» нужно проводить в каждом TCP-соединении, так как HTTP не запоминает состояния, поэтому ни клиент, ни сервер не могут сохранять информацию между различными запросами. HTTP — один из самых ранних протоколов, и при его создании никто не ожидал, что на веб-странице придётся загружать так много ресурсов.
Такое «рукопожатие» делает загрузку страницы медленнее. Чтобы решить проблему, разработчикам приходится сокращать количество загружаемых ресурсов, например, использовать спрайты или разделять файлы по разным доменам — этот метод называется domain sharding. Такие манипуляции уменьшают количество TCP-соединений, хотя и создают свои трудности.
HTTP/2
HTTP/2 — улучшенная версия HTTP. По данным Can I Use, его поддерживают большинство браузеров.
Главное нововведение этого протокола — одно TCP-соединение на разные запросы, или мультиплексирование.
Ещё в HTTP/2 появился push-сервер, то есть сервер может отправлять больше ответов на один клиентский запрос. Например, если клиент запрашивает файлы index.html, style.css и logo.svg, то сервер отправит сразу три файла. Без push-сервера клиенту нужно запрашивать каждый файл отдельно
Поэтому многие оптимизации под HTTP при переходе на HTTP/2 уже не нужны. Например, можно отказаться от разделения ресурсов по доменам.
HTTP/3
HTTP/3 — третья версия HTTP, основанная на QUIC — протоколе, который предполагает быстрое подключение к интернету через UDP.
Главное преимущество HTTP/3 — сокращение задержки при установке соединения. QUIC достаточно одного «рукопожатия», чтобы установить безопасный сеанс. А ещё HTTP/3 работает поверх UDP, поэтому скорость доставки данных быстрее, чем у HTTP и HTTP/2 поверх TCP.
Протокол уже получил статус предложенного стандарта, то есть браузеры почти завершили работу над поддержкой протокола. Но пока поддержки недостаточно, чтобы переводить сайт с HTTP/2 на HTTP/3.
WebSockets
В этом протоколе соединение устанавливается гораздо быстрее, чем в HTTP — здесь отправляется «рукопожатие» сразу со всей необходимой информацией для передачи данных. Канал при этом остаётся открытым, пока кто-то из сторон не прервёт его. Это означает, что запросы и ответы будут происходить практически мгновенно. А если сервер получит новые данные, он отправит их клиенту без запроса.
Протокол WebSockets используют там, где важна скорость доставки данных, например, в чатах и мессенджерах, играх, онлайн-трансляциях. Он, скорее всего, не пригодится при разработке простых веб-приложений, небольших CMS или при использовании REST API, где достаточно HTTP-запросов GET, POST, PUT и DELETE.
HTTP методы
- GET
- HEAD
- POST
- PUT
- DELETE
- CONNECT
- OPTIONS
- TRACE
- PATCH
__
- GET - запрашивает представление ресурса. Запросы с использованием этого метода могут только извлекать данные.
- HEAD запрашивает ресурс так же, как и метод GET, но без тела ответа.
- POST используется для отправки сущностей к определённому ресурсу. Часто вызывает изменение состояния или какие-то побочные эффекты на сервере.
- PUT заменяет все текущие представления ресурса данными запроса.
- DELETE удаляет указанный ресурс.
- CONNECT устанавливает “туннель” к серверу, определённому по ресурсу.
- OPTIONS используется для описания параметров соединения с ресурсом.
- TRACE выполняет вызов возвращаемого тестового сообщения с ресурса.
- PATCH используется для частичного изменения ресурса.
Какие методы взаимодействия с API существуют?
В чем разница между ними?
SOAP (Simple Object Access Protocol) - Простой Протокол Доступа к Объектам. Клиент и сервер обмениваются сообщениями посредством XML. Это менее гибкий API, который был более популярен в прошлом.
RPC (Remote Procedure Call) - Удалённый Вызов Процедур. Клиент выполняет функцию (или процедуру) на сервере, и сервер отправляет результат обратно клиенту.
Websocket – современная разработка web API, которая использует объекты JSON для передачи данных. WebSocket поддерживает двустороннюю связь между клиентскими приложениями и сервером. Сервер может отправлять сообщения обратного вызова подключенным клиентам, что делает его более эффективным, чем REST.
REST - на сегодняшний день это самые популярные и гибкие API-интерфейсы в Интернете. Клиент отправляет запросы на сервер в виде данных. Сервер использует этот клиентский ввод для запуска внутренних функций и возвращает выходные данные обратно клиенту.
GraphQL
gRPC
Как можно протестировать API, что там нужно проверять?
Через отправку запросов по соответствующему протоколу (REST, SOAP).
- Код ответа
- Корректность ответа
- Заголовки ответа?
- Сверка ответа со схемой
Проверка спецификации:
эндпоинты правильно именованы
ресурсы и их типы правильно отражают объектную модель
нет отсутствующей или дублирующей функциональности
отношения между ресурсами правильно отражаются в API
Как расшифровывается CRUD?
- Create
- Read
- Update
- Delete
Терамин обозначающий четыре базовые функции: создание (create), чтение (read), редактирование (update) и удаление (delete). Как правило, термин “CRUD” употребляется в контексте работы с хранилищем данных.
Чем отличается GET от POST?
- GET для получения данных
- POST используется для обновления, отправляет данные в теле запроса
Какие отличия между XML и JSON?
XML - язык разметки.
JSON - формат для обмена данными, обычно реализуемый, как массив данных.
JSON более компактен, чем XML, его конструкции легче анализируются средствами Java Script, для которого JSON является внутренним используемым типом данных.
Ключевые различия:
- Объект JSON имеет тип, тогда как объекты XML не содержат типов
- В JSON проще получить объект нежели в XML (данные XML должны быть проанализированы)
- Читабельность JSON файла выше по сравнению с XML
- JSON не обеспечивает поддержку пространства имен, в то время как XML обеспечивает
- JSON не имеет возможностей отображения, тогда как XML имеет такую возможность
- JSON менее защищен, тогда как XML более безопасен по сравнению с JSON
- JSON поддерживает только кодировку UTF-8, тогда как XML поддерживает различные кодировки
Какие основные форматы передачи данных?
- JSON (JavaScript Object Notation) - текстовый формат обмена данными, основанный на JavaScript, но при этом независим от JS.
- XML (eXtensible Markup Language/расширяемый язык разметки) - используется для хранения и передачи данных. формат рекомендован Консорциумом Всемирной паутины (W3C), поэтому часто используется для передачи данных по API. Единственно возможный формат входных и выходных данных в SOAP.
- CSV (Comma-Separated Values/значения, разделенные запятыми) – текстовый формат, предназначенный для представления табличных данных с фиксированным количеством столбцов. Каждая строка файла — это одна строка таблицы.
- YAML (YAML Ain’t markup language/YAML не язык разметки; ранее Yet Another Markup Language) - язык для сериализации данных, который позволяет хранить сложноорганизованные данные в компактном и читаемом формате. Похож на XML и JSON, но использует более минималистичный синтаксис при сохранении аналогичных возможностей.
Как происходит шифрование? Или как шифруются сообщения между браузером и сервером?
Handshake:
1. Клиент отправляет запрос серверу со списком SSL\TLS версий шифрования
2. Сервер выбирает лучший из доступных
2. Затем отправляет публичный ключ и свой сертификат клиенту
2. Клиент проверяет сертификат сервера
3. Затем шифрует публичным ключем сервера промежуточный ключ
4. Отправляет серверу
5. Сервер расшифровывает предварительный ключ
6. Формируется общий симметричный ключ