ћерион Ќетворкс

ћы живем в мире, в котором побеждают быстрые и общительные. ≈сли говорить о приложени€х, то достичь двух этих целей можно через WebSocket.

WebSocket часто называют высокопроизводительным протоколом передачи данных, и он необходим дл€ создани€ канала св€зи между клиентом и сервером.

“ак что же это значит, и какую роль WebSocket играет в безопасности API? ќбо всем этом поговорим в статье.


„то такое WebSocket?

»сход€ из общеприн€того названи€, WebSocket – это дуплексный протокол, который часто используетс€ в клиент-серверном канале св€зи. ќн считаетс€ двунаправленным, т.е. передача данных выполн€етс€ от клиента к серверу и наоборот. 

—оединение, установленное с помощью WebSocket, сохран€етс€ до тех пор, пока его не прервет любой из участников. ≈сли одна сторона разрывает соединение, то друга€ не сможет продолжить коммуникацию, поскольку соединение автоматически разрываетс€ дл€ обоих участников.

„тобы инициировать соединение, WebSocket нужна поддержка со стороны HTTP. Ёто основа современной разработки веб-приложений, с непрерывным потоком данных и несинхронизированным трафиком.

WebSocket

ƒл€ чего нужен WebSocket и в каких случа€х от него лучше отказатьс€?

WebSocket – это необходимый инструмент дл€ клиент-серверного взаимодействи€. ѕоэтому важно четко понимать его возможности и варианты использовани€.

WebSocket подходит, если вы:

–азрабатываете веб-приложени€ реального времени

—амый попул€рный вариант использовани€ WebSocket – это разработка приложений реального времени с посто€нным отображением данных на стороне клиента. ¬нутренний сервер посто€нно отправл€ет эти данные, а WebSocket реализует их бесперебойную передачу или отправку через уже открытое соединение. »спользование WebSocket ускор€ет передачу данных и улучшает производительность приложени€. 

–еальным примером использовани€ такой возможности WebSocket €вл€етс€ сайт по торговле биткоинами. WebSocket помогает обрабатывать данные, которые внутренний сервер отправл€ет клиенту.

—оздаете чат-приложени€

–азработчики чат-приложений выбирают WebSocket дл€ выполнени€ таких операций, как одноразовый обмен и публикаци€/трансл€ци€ сообщений. ƒл€ отправки/получени€ сообщений используетс€ одно и то же WebSocket соединение, поэтому така€ коммуникаци€ считаетс€ простой и быстрой.

–аботаете над игровым приложением

ѕри разработке игрового приложени€ крайне важно, чтобы сервер посто€нно получал данные, не запрашива€ обновлени€ пользовательского интерфейса. WebSocket позвол€ет достичь этой цели без вмешательства в интерфейс приложени€.

“еперь, когда стало €сно, дл€ каких целей можно использовать WebSocket, стоит поговорить о том, когда стоит присмотретьс€ к другим решени€м.

WebSocket – далеко не самый лучший вариант, когда вам нужно получить старые данные, либо же данные требуютс€ только дл€ разовой обработки. ¬ таких случа€х лучше ограничитьс€ HTTP-протоколами.


WebSocket или HTTP?

ѕоскольку дл€ св€зи между приложени€ми используетс€ и HTTP, и WebSocket, люди часто путаютс€ и не могут определитьс€. Ќиже приведено подробное описание каждого из вариантов.

 ак уже говорилось, WebSocket €вл€етс€ двунаправленным и фреймовым протоколом. HTTP – это, наоборот, однонаправленный протокол, работающий над TCP-протоколом.

ѕротокол WebSocket поддерживает непрерывную передачу данных, поэтому часто используетс€ в разработке приложений реального времени. HTTP не зависит от состо€ни€ и используетс€ дл€ создани€ RESTful-приложений. 

ѕередача данных в WebSocket происходит в обе стороны, так что он считаетс€ довольно быстрым протоколом. HTTP проигрывает по скорости WebSocket, поскольку в этом протоколе соединение устанавливаетс€ с одной стороны.

WebSocket использует унифицированное TCP-соединение. ѕока один из участников не разорвет это соединение, оно будет активным. HTTP создает разные соединени€ дл€ разных запросов. ѕосле выполнени€ запроса соединение разрываетс€ автоматически. 

WebSocket и HTTP

 ак устанавливаетс€ WebSocket-соединение

ѕроцесс начинаетс€ с «рукопожати€» (handshake), в котором используетс€ нова€ схема ws или wss. ≈сли проводить параллель, то это примерно то же, что HTTP и защищенный протокол HTTP (HTTPS).

¬ этой схеме клиенты и серверы следуют стандартному протоколу подключени€ WebSocket. ”становка WebSocket-соединени€ начинаетс€ с дополнени€ HTTP-запроса несколькими заголовками: Connection: Upgrade, Upgrade: WebSocket, Sec-WebSocket- Key и т.д.. 

—оединение устанавливаетс€ в следующие этапы:

1. «апрос

«аголовок Connection: Upgrade указывает на WebSocket-рукопожатие, а в Sec-WebSocket-Key содержитс€ случайное значение в кодировке Base64. Ёто значение произвольно генерируетс€ во врем€ каждого WebSocket-рукопожати€. „астью запроса также €вл€етс€ и заголовок ключа.

¬се вышеперечисленные заголовки образуют GET HTTP-запрос. ќн выгл€дит примерно так:

GET ws://websocketexample.com:8181/ HTTP/1.1
Host: localhost:8181
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: b6gjhT32u488lpuRwKaOWs==	

¬ Sec-WebSocket-Version отмечаетс€ верси€ WebSocket-протокола, которой может пользоватьс€ клиент. 

2.ќтвет

¬ заголовок ответа Sec-WebSocket-Accept попадает значение, отправленное в заголовке запроса Sec-WebSocket-Key. ќтвет прив€зан к спецификации протокола и активно используетс€ дл€ устранени€ ввод€щей в заблуждение информации. ƒругими словами, така€ структура улучшает безопасность API и блокирует некорректно настроенные сервера от создани€ ошибок при разработке приложени€. 

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: rG8wsswmHTJ85lJgAE3M5RTmcCE=	

WebSocket-протокол

ѕротокол WebSocket – это тип фреймового протокола, который включает в себ€ различные дискретные блоки с данными. ƒл€ корректного функционировани€ в нем развертываетс€ информационна€ часть пакета, тип фрейма и длина полезной нагрузки. „тобы пон€ть принципы работы WebSocket, необходимо разобратьс€, из чего он состоит.  лючевые элементы перечислены ниже.

  • Ѕит FIN – это основна€ часть WebSocket. ќн генерируетс€ автоматически при создании подключени€.
  • ‍Ѕиты RSV1, RSV2, RSV3 – эти биты зарезервированы дл€ дополнительных возможностей.
  • Opcode – это часть каждого фрейма; объ€сн€ет процесс интерпретации данных полезной нагрузки дл€ отдельного фрейма. ѕримеры распространенных значений: 0x00, 0x0, 0x02, 0x0a, 0x08 и т.д.
  • ЅитMask активируетс€, когда один бит задан как 1.

ƒл€ всех данных полезной нагрузки в WebSocket используетс€ случайный ключ, выбранный клиентом.  люч маски в сочетании с данными полезной нагрузки помогает обмениватьс€ этими данными через операцию XOR. Ёто очень важно дл€ безопасности API приложени€, поскольку маскирование предотвращает неправильную интерпретацию кэша и т.н. «отравленный кэш».

–азберем эти ключевые элементы подробнее.

ƒлина полезной нагрузки

»спользуетс€ дл€ кодировани€ общей длины данных полезной нагрузки в WebSocket. ќтображаетс€, когда закодированна€ длина данных меньше 126 битов. ≈сли длина данных больше 126 битов, то дл€ описани€ длины полезной нагрузки используютс€ дополнительные пол€. 

 люч маски

 аждый фрейм, который клиент отправл€ет на сервер, маскируетс€ 32-битным значением. ќтображаетс€, когда бит маски равен 1. ≈сли бит маски равен 0, то ключ маски также будет нулевым. 

ƒанные полезной нагрузки

¬се случайные данные приложени€ и расширени€ считаютс€ данными полезной нагрузки. Ёти данные используютс€ клиентом и серверами дл€ согласовани€ и в процессе первых рукопожатий.


«аключение

WebSocket – это обновленный, быстрый и простой протокол дл€ установки посто€нной клиент-серверной св€зи. WebSocket гарантирует неразрывность подключени€ и высокую безопасность данных, даже при непрерывной передаче данных. »спользование WebSocket предельно упрощает разработку приложений в режиме реального времени. ¬ р€де случаев WebSocket про€вл€ет себ€ лучше, чем HTTP, поскольку поддерживает дуплексную св€зь (например: сайты фондовой биржи, онлайн-игры, приложени€ дл€ биткоинов, службы обмена сообщени€ми).

WebSocket стал насто€щим кладезем полезных возможностей при разработке. ќн улучшает безопасность API и поддерживает множество ресурсов (после подключени€ к внешним библиотекам). ѕопробуйте заменить свои обычные протоколы обмена данными на WebSocket и оцените его преимущества.


—кидки 50% в Merion Academy

¬ыбрать курс