WebSocket

WebSocket — протокол связи поверх TCP-соединения, предназначенный для обмена сообщениями между браузером и веб-сервером, используя постоянное соединение.

В настоящее время[когда?] в W3C осуществляется стандартизация API Web Sockets. Черновой вариант стандарта этого протокола утверждён IETF.

WebSocket разработан для воплощения в веб-браузерах и веб-серверах, но он может быть использован для любого клиентского или серверного приложения. Протокол WebSocket — это независимый протокол, основанный на протоколе TCP. Он делает возможным более тесное взаимодействие между браузером и веб-сайтом, способствуя распространению интерактивного содержимого и созданию приложений реального времени.

Открытие канала WebSocket

Для установления соединения WebSocket клиент и сервер используют протокол, похожий на HTTP. Клиент формирует особый HTTP-запрос, на который сервер отвечает определенным образом.

Протокол 75

До редакции черновика протокола номер 75 Архивная копия от 8 июня 2010 на Wayback Machine включительно соединение WebSocket устанавливалось следующим образом. Запрос клиента:

GET /demo HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Host: example.com
Origin: http://example.com
WebSocket-Protocol: sample

Ответ сервера, подтверждающий переход на WebSocket:

HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
WebSocket-Origin: http://example.com
WebSocket-Location: ws://example.com/demo
WebSocket-Protocol: sample

Сразу после отправки ответа WebSocket-соединение считается установленным, клиент и сервер могут начинать двунаправленный обмен сообщениями по этому же TCP-соединению. Для передачи текстового сообщения (в кодировке UTF-8) необходимо перед ним передать нулевой байт, а после — байт со значением 255.

Протокол 76

2 июня 2010 года в протокол WebSocket были внесены поправки, изменившие процедуру установления соединения WebSocket без сохранения обратной совместимости. В 76-й Архивировано 19 апреля 2012 года. редакции черновика протокола WebSocket добавлена защита от поддельных запросов. Клиент, поддерживающий новую схему, присылает следующий запрос:

GET /demo HTTP/1.1
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Key2: 4 @1 46546xW%0l 1 5
Host: example.com
Sec-WebSocket-Key1: 12998 5 Y3 1 .P00
Origin: http://example.com
WebSocket-Protocol: sample

^n:ds[4U

В запрос добавлены новые заголовки «Sec-WebSocket-Key1» и «Sec-WebSocket-Key2» и 8-байтовое тело запроса. Все они генерируются клиентом случайным образом.

Ответ сервера, подтверждающий переход на WebSocket:

HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
Sec-WebSocket-Origin: http://example.com
Sec-WebSocket-Location: ws://example.com/demo
Sec-WebSocket-Protocol: sample

8jKS'y:G*Co,Wxa-

Ответ содержит новые названия заголовков («Sec-WebSocket-Origin», «Sec-WebSocket-Location», «Sec-WebSocket-Protocol» вместо «WebSocket-Origin», «WebSocket-Location», «WebSocket-Protocol») и 16-байтное тело ответа, вычисляемое следующим образом:

  1. из строки со значением заголовка запроса Sec-WebSocket-Key1 исключить все символы, не являющиеся цифрами (не попадающие в диапазон '0'..'9');
  2. полученную строку превратить в 64-битное целое число (для примера выше получим 1299853100);
  3. полученное число разделить целочисленным делением на количество пробелов в исходной строке со значением заголовка;
  4. полученное число представить в виде 4-байтового 32-битного числа в формате big endian: старший байт хранится по нулевому смещению;
  5. проделать то же самое с заголовком Sec-WebSocket-Key2;
  6. интерпретируя числа из пунктов 4) и 5) как 4-байтовые строки, конкатенировать их (сложить в одну строку) и добавить как строку тело запроса;
  7. вычислить от полученной 16-байтной строки значение MD5 и записать это значение в тело ответа «как есть», без преобразования в какое-либо представление;

Примечания.

Несмотря на «похожесть» новых запросов и ответов на запросы и ответы протокола HTTP, они таковыми не являются. Например, в запросе есть тело, но в заголовках поле «Content-Length» отсутствует (что нарушает соглашения HTTP).

Серверной части следует поддерживать оба вида клиентов и различать их по наличию или отсутствию в запросе заголовков Sec-WebSocket-Key1 и Sec-WebSocket-Key2.

Протокол 07

В версию 07 Архивировано 19 апреля 2012 года. черновика протокола от 22 апреля 2011 были внесены изменения.

В отличие от протокола 76, согласно которому данные передаются без шифрования[1], каждый байт передаваемых от клиента (браузера) серверу данных в этой версии протокола обязательно маскируется 4-байтовой маской[2]. Она создается для каждого сообщения заново.

Передаваемое сообщение теперь имеет заголовок, в котором содержатся такие данные, как:

  • фрагментировано ли сообщение;
  • тип передаваемых данных;
  • подвергалось ли сообщение маскировке;
  • размер данных;
  • маска;
  • другие управляющие данные (ping, pong…).

Взаимодействие между клиентом и сервером начинается с запроса от клиента:

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 7

Ответ сервера имеет следующий вид:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Protocol: chat

Ответ содержит заголовок Sec-WebSocket-Protocol с единственным протоколом, выбраным сервером (chat) из всех поддерживаемых клиентом (chat, superchat). Заголовок Sec-WebSocket-Accept формируется следующим образом:

  1. взять строковое значение из заголовка Sec-WebSocket-Key и объединить со строкой 258EAFA5-E914-47DA-95CA-C5AB0DC85B11 (в приведённом примере получится dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11)
  2. вычислить бинарный хеш SHA-1 (бинарная строка из 20 символов) от полученной в первом пункте строки
  3. закодировать хеш в Base64 (s3pPLMBiTxaQ9kYGzzhZRbK+xOo=)

Пример реализации вышеуказанного алгоритма на языке PHP:

<?php
  echo base64_encode(SHA1("dGhlIHNhbXBsZSBub25jZQ==258EAFA5-E914-47DA-95CA-C5AB0DC85B11", true));
?>

Протокол RFC 6455 (далее данные передаются фрэймами с использованием этого протокола)

rfc-frame

11 декабря 2011 года протокол приобрел статус RFC.

Вместо заголовка Sec-WebSocket-Origin теперь используется просто Origin.

Схема URI

Протокол Web Socket определяет две URI-схемы, ws: (нешифрованное соединение) и wss: (шифрованное соединение).

Реализация WebSocket в браузерах

Для установки соединения клиентский скрипт создает объект WebSocket, в конструктор которого передает параметр WebSocket URI, и определяет функции обратного вызова при соединении, получении сообщения и разрыве соединения.

<html>
    <head>
        <script>
            const webSocket = new WebSocket('ws://localhost/echo');

            webSocket.onopen = event => {
                alert('onopen');
                webSocket.send("Hello Web Socket!");
            };

            webSocket.onmessage = event => {
                alert('onmessage, ' + event.data);
            };

            webSocket.onclose = event => {
                alert('onclose');
            };
        </script>
    </head>
    <body>
    </body>
</html>

В настоящее время[когда?] WebSocket поддерживается в следующих браузерах:

Проверить поддержку браузером WebSocket можно, пройдя по ссылке: http://caniuse.com/#feat=websockets Архивная копия от 8 апреля 2017 на Wayback Machine.

В конце ноября 2010 Adam Barth опубликовал результаты исследования надежности используемого протокола[3]. По его результатам выяснилось, что в случае использования прозрачных прокси-серверов возможна подмена кеша передаваемых данных с тем, что пользователи вместо реальных данных будут получать версию данных от злоумышленника. Проблема оказалась достаточно серьёзной для того, чтобы разработчики Firefox и Opera объявили[4] о том, что в будущих версиях их браузеров поддержка веб-сокетов будет по умолчанию отключена вплоть до устранения проблемы небезопасности данного протокола (хотя осталась возможность их включить).

Примечания

Ссылки

Read other articles:

Бло́к-конта́кт (рос. блок-контакт, англ. block-contact, auxiliary contact, interlock contact; нім. Blockkontakt m) — контакт електричного апарата, що перемикає кола керування чи сигналізації. Приклад застосування блок-контаків Блок-контакти — допоміжні контакти, які перемикають електричні кола си

 

Ukraine WR-Kürzel UKR WR-Rang 36. (49,30 Punkte) (Stand: 30. Oktober 2023)[1] Heim Auswärts Meiste Länderspiele ? Meiste erzielte Punkte ? Meiste erzielte Versuche ? Erstes Länderspiel Georgien 19:15 Ukraine (21. November 1991) Höchster Sieg Österreich 0:78 Ukraine (24. November 1994) Höchste Niederlage Rumänien 97:0 Ukraine (19. März 2005) Weltmeisterschaft Teilnahmen: keine Die ukrainische Rugby-Union-Nationalmannschaft vertritt die Ukraine in der Sportart Ru...

 

Este artigo não cita fontes confiáveis. Ajude a inserir referências. Conteúdo não verificável pode ser removido.—Encontre fontes: ABW  • CAPES  • Google (N • L • A) (Junho de 2019) Metrô de Omsk Informações Local Omsk Tipo de transporte Metropolitano Funcionamento Início de funcionamento 2015 - 2016 Mapa da Rede O Metrô de Omsk é um sistema de metropolitano que está em construção e que servirá a cidade russa de Om...

Concert venue near Morrison, Colorado, U.S. Red Rocks redirects here. For other uses, see Red Rocks (disambiguation). This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these template messages) This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Red Rocks Amphitheatre...

 

American writer and benefactor Olivia Egleston Phelps StokesBorn(1847-01-11)January 11, 1847New York City, New York, U.S.DiedDecember 14, 1927(1927-12-14) (aged 80)Washington, D.C., U.S.Parent(s)James Boulter StokesCaroline Phelps StokesRelativesCaroline Phelps Stokes (sister)Anson Phelps Stokes (brother)William Earl Dodge Stokes (brother)Anson Greene Phelps (grandfather)Edward Stiles Stokes (cousin)Grace Hoadley Dodge (cousin)Isaac Phelps Stokes (nephew) Olivia Egleston Phelps Stokes (J...

 

American live theatre association since 1930 The Broadway League, Inc.Logo of the Broadway LeagueFounded1930; 93 years ago (1930)TypeTrade Association 501(c)(6)[1]Tax ID no. 13-0951470Location729 Seventh Avenue 5th Floor New York, New York 10019 United StatesArea served TheatreMembers 700+Key peopleCharlotte St. MartinExecutive DirectorRevenue $9,360,554 (FY2013)Expenses$7,587,315 (FY2013)Employees 59Volunteers 90Websitewww.broadwayleague.com Formerly calledThe Leagu...

Elod adalah makanan olahan dari Singkong,di mana proses pembuatannya memanfaatkan cairan limbah dari singkong yang hendak dibuat menjadi aci. Elod sendiri memiliki ciri-ciri berwarna hijau tua kecoklatan, memiliki postur padat namun lembek, dan memiliki rasa asin gurih. Elod adalah makanan khas Ciparay (Kabupaten Bandung) yang banyak diminati oleh masyarakat luas. Elod dapat dimakan langsung, tetapi pada umumnya digoreng terlebih dahulu untuk dijadikan gorengan seperti bakwan, gehu dll lbsHid...

 

French television channel network This article may be a rough translation from French. It may have been generated, in whole or in part, by a computer or by a translator without dual proficiency. Please help to enhance the translation. The original article is under français in the languages menu in the upper right corner. If you have just labeled this article as needing attention, please add{{subst:Needtrans|pg=Virgin 17 |language=French |comments=  ...

 

本條目存在以下問題,請協助改善本條目或在討論頁針對議題發表看法。 此條目缺少有關生平經歷的信息。 (2021年4月13日)請擴充此條目相關信息。討論頁可能有詳細細節。 此生者传记条目需要补充更多可供查證的来源。 (2021年4月13日)请协助補充可靠来源,无法查证的在世人物内容将被立即移除。 關令翹配音演员罗马拼音Kwan Ning Kiu英文名Gil昵称關生、Gil爺出生 (1985-11-12) 198...

Australian currency Australian coins refers to the coins which are or were in use as Australian currency. During the early days of the colonies that formed Australia, foreign as well as British currency was used, but in 1910, a decade after federation, Australian coins were introduced. Australia used pounds, shillings and pence until 1966, when it adopted the decimal system with the Australian dollar divided into 100 cents. With the exception of the first Proclamation Coinage and the holey do...

 

Former American amusement park This article is about the theme park that operated between 1963 and 2004. For the theme park that operated between 2010 and 2015, see Miracle Strip at Pier Park. Miracle Strip Amusement ParkA postcard from the 1970s showing the park.LocationPanama City Beach, FL, United States of AmericaCoordinates30°11′28″N 85°49′30″W / 30.191°N 85.825°W / 30.191; -85.825StatusDefunctOpenedMay 25, 1963ClosedSeptember 5, 2004AttractionsRoller ...

 

In Judaism, the Yom Kippur Temple service was a special sacrificial service performed by the High Priest of Israel on the holiday of Yom Kippur, in the Temple in Jerusalem (and previously in the Tabernacle). Through this service, according to the Bible, the Jewish people would achieve atonement for their sins once each year. The service is notable as the only time in the year any person was allowed to enter the Holy of Holies, and is the source of the term scapegoat. The service is commanded ...

Top 14 2019-2020 Généralités Sport Rugby à XV Organisateur(s) Ligue nationale de rugby Édition 121e Lieu(x) France Date 24 août 2019 - 26 juin 2020 Nations France Participants 14 équipes Site web officiel www.lnr.fr Hiérarchie Hiérarchie 1er échelon Niveau inférieur Pro D2 2019-2020 Palmarès Tenant du titre Stade toulousain (20) Promu(s) en début de saison Aviron bayonnaisCA Brive Vainqueur non attribué [1] Relégué(s) — Meilleur(s) marqueur(s) Thomas Combezou (7 essais)...

 

Прослушать введение в статью noicon Аудиозапись создана на основе версии статьи от 18 апреля 2010 года Лине́йный кре́йсер — класс артиллерийских кораблей, имеющих вооружение, близкое к линкорам, но обладающих большей скоростью хода при более лёгком бронировании. Появил...

 

Heilige Kruisverheffing Russisch icoon Gevierd door Rooms-Katholieke en Orthodoxe kerk Type Liturgisch feest Datum 14 september 27 september (deel Orthodoxe kerk) De Heilige Kruisverheffing is een feest in de liturgie van de Rooms-Katholieke Kerk en de Orthodoxe Kerk. De liturgische kleur op dit feest is rood. De datum valt bij de katholieke en een deel van de orthodoxe kerken op 14 september en een ander deel van de orthodoxen viert het in lijn met de juliaanse kalender op 27 september. Men ...

Front Patriotik Rwanda Front Patriotique RwandaisPresidenPaul KagameSekretaris JenderalWellars GasamageraPendiriFred Gisa RwigyemaDibentukDesember 1987Kantor pusatKigaliIdeologiNasionalisme RwandaLiberalisme ekonomiOtoritarianismeHistoris:Kepentingan TutsiPosisi politikTenda besarWarna  Biru langitDewan Perwakilan36 / 80BenderaSitus webrpfinkotanyi.rw Front Patriotik Rwanda (Prancis: Front Patriotique Rwandais) adalah partai politik yang kini menguasai Rwanda, dipimpin oleh Presiden...

 

CrossingPoster layar lebarNama lainHangul크로싱 Alih Aksara yang DisempurnakanKeurosingMcCune–ReischauerK'ŭrosing SutradaraKim Tae-kyunProduserPatrick D. ChoiDitulis olehLee Yu-jinPemeranCha In-pyoSin Myeong-cheolPenyuntingKo Im-pyoDistributorVantage HoldingsTanggal rilis 26 Juni 2008 (2008-06-26) Durasi107 menitNegaraKorea SelatanBahasaKoreaAnggaran$5,419,301[1] Crossing (yang juga dikenal sebagai Keurosing) adalah sebuah film Korea Selatan 2008 sutradaraan Kim Tae-k...

 

Wilayah ekonomi Tanah Hitam Tengah (bahasa Rusia: Центра́льно-Чернозёмный экономи́ческий райо́н);, kadang-kadang juga disebut Chernozem Pusat atau Wilayah ekonomi Chernozemic Pusat, adalah salah satu dari dua belas wilayah ekonomi Rusia. Wilayah ekonomi Tanah Hitam Pusat di peta Rusia Komposisi Oblast Belgorod Oblast Kursk Oblast Lipetsk Oblast Tambov Oblast Voronezh Kawasan ini mengalami kesulitan akibat dari penurunan populasi.[1] Refere...

Romanas Prodi Gimė 1939 m. rugpjūčio 9 d. (84 metai)Skandijano mieste, Emilija-Romanija regione Veikla italų politikas, buvęs Europos Komisijos pirmininkas, Italijos ministras pirmininkas Alma mater 1961 m. Katalikų universitetas Milane Vikiteka Romano Prodi Romanas Prodi (g. 1939 m. rugpjūčio 9 d. Skandijano mieste, Emilija-Romanija regione) – italų politikas, buvęs Europos Komisijos pirmininkas, bei du kartus Italijos ministras pirmininkas. Biografija R. Prodi gimė 1939 m....

 

Pa ver l'equipu de fútbol, NK Maribor. Maribor Alministración País EsloveniaMunicipio urbano (es) Ciudad Maribor (es) Tipu d'entidá ciudáCabezaleru/a del gobiernu Andrej FištravecNome oficial Maribor (sl)Nome llocal Maribor (sl)Códigu postal 2000XeografíaCoordenaes 46°33′N 15°38′E / 46.55°N 15.63°E / 46.55; 15.63 MariborMaribor (Eslovenia)Superficie 41 km²Altitú 275 m y 266 mDemografíaPoblación 96 211 hab. (1r xineru 2020)- 48 626 ho...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!