В чем концептуальная разница между HTTP, HTTPS и WebSocket
Что проверяют
Понимаете ли вы, что HTTPS это не отдельный протокол, а WebSocket отдельный, и знаете ли, когда что применять.
Как отвечать
HTTP это прикладной протокол по схеме «запрос, ответ». Инициатива всегда у клиента: сервер не может заговорить первым. Протокол без состояния, каждый запрос самодостаточен, сессия держится куками или токеном.
HTTPS это тот же HTTP, но поверх TLS. Отдельным протоколом он не является, добавляется слой, дающий три вещи: шифрование (никто по пути не прочитает), целостность (никто не подменит) и подлинность сервера по сертификату. Цена это рукопожатие при установке соединения, дальше накладные расходы малы. Сегодня это норма по умолчанию, и часть возможностей браузера (геолокация, сервис-воркеры, HTTP/2) без него просто не работает.
WebSocket это отдельный протокол со своей схемой ws и wss. Соединение начинается как обычный HTTP-запрос с заголовком Upgrade, а после рукопожатия то же TCP-соединение переключается на обмен кадрами. Дальше связь постоянная и полнодуплексная: обе стороны шлют сообщения когда захотят, без нового запроса и без заголовков на каждое сообщение.
Отсюда выбор:
- HTTP и HTTPS для обычных запросов, REST, загрузки страниц. Кэшируется, простой, отлично масштабируется;
- WebSocket там, где сервер должен сам сообщать: чат, уведомления, котировки, совместное редактирование, игры.
Стоит назвать промежуточный вариант: события от сервера (SSE). Это односторонний поток от сервера поверх обычного HTTP, с автоматическим переподключением и без отдельного протокола. Если данные идут только вниз, он проще WebSocket и лучше дружит с прокси.
Про издержки: постоянное соединение занимает ресурсы на сервере и требует учитывать таймауты прокси и переподключение при обрыве.
Где спотыкаются
Называют HTTPS отдельным протоколом.
Считают, что WebSocket работает поверх HTTP всё время, а не только при рукопожатии.
Берут WebSocket там, где хватило бы периодического запроса или SSE.
Не продумывают переподключение и накопление пропущенных сообщений.