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:

الجمعية المصرية لكتاب ونقاد السينما البلد مصر  تاريخ التأسيس أكتوبر 1973  الاهتمامات السينما اللغات الرسمية عربية تعديل مصدري - تعديل   الجمعية المصرية لكتاب ونقاد السينما هي جمعية تختص بتنظيم ورعاية الفن السينمائي في مصر. تأسست في أكتوبر 1973 برئاسة الناقد كمال الملا...

 

 

Jerman Selatan Jerman Selatan (Jerman: Süddeutschlandcode: de is deprecated ) adalah kawasan yang tidak memiliki batas yang pasti, tetapi pada umumnya mencakup wilayah yang penduduknya menuturkan dialek Jerman Hulu. Wilayah tersebut meliputi Kadipaten Bayern dan Schwaben yang pernah ada dalam sejarah, atau negara bagian Bayern dan Baden-Württemberg di Jerman modern, tanpa mencakup Austria dan Swiss. Saarland dan bagian selatan Hessen dan Rheinland-Pfalz juga kadang-kadang dianggap sebagai b...

 

 

2012 2022 Élections législatives françaises de 2017 577 députés de l'Assemblée nationale(majorité absolue : 289 sièges) 11 et 18 juin 2017 Corps électoral et résultats Votants au 1er tour 23 167 508   48,70 %  8,5 Votants au 2d tour 20 164 615   42,64 %  12,8 Majorité présidentielle – Édouard Philippe Liste La République en marcheMouvement démocrateMouvement des progressistesParti écologiste Voix au 1er to...

2022 Missouri State Auditor election ← 2018 November 8, 2022 2026 →   Nominee Scott Fitzpatrick Alan Green Party Republican Democratic Popular vote 1,219,553 772,005 Percentage 59.4% 37.6% County resultsFitzpatrick:      50–60%      60–70%      70–80%      80–90%Green:      50–60%      70–80% State Au...

 

 

Figure skater Kevin AlvesAlves at the 2010 Junior World ChampionshipsFull nameKevin AlvesBorn (1991-10-19) October 19, 1991 (age 32)Toronto, Ontario, CanadaHometownNewmarket, Ontario, CanadaHeight1.78 m (5 ft 10 in)Figure skating careerCountry Brazil (2007–2012) Canada (until 2007) Kevin Alves (born October 19, 1991) is a Canadian-Brazilian actor and former figure skater. He competed in the free skate at five ISU Championships. He is the first male skater to re...

 

 

Upper house of the Parliament of Tasmania Legislative Council50th ParliamentTypeTypeUpper house of the Parliament of Tasmania HistoryFounded1825; 199 years ago (1825)LeadershipPresidentCraig Farrell, Labor since 21 May 2019 Deputy President and Chair of CommitteesRuth Forrest, Independent since 10 May 2008 Leader of the GovernmentLeonie Hiscutt, Liberal Deputy Leader of the GovernmentJo Palmer, Liberal StructureSeats15Political groupsGovernment   Liberal...

Village in Iowa, United StatesAlgona, IowaVillage Left, the Kossuth County Courthouse, right, the Henry Adams BuildingLocation of Algona, IowaCoordinates: 43°4′13″N 94°13′47″W / 43.07028°N 94.22972°W / 43.07028; -94.22972Country United StatesState IowaCountyKossuthArea[1] • Total4.62 sq mi (11.97 km2) • Land4.61 sq mi (11.95 km2) • Water0.01 sq mi (0.02 km2)E...

 

 

Cet article est une ébauche concernant la Russie. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. Chronologie de l'Europe 2007 en Russie - 2008 en Russie - 2009 en Russie - 2010 en Russie - 2011 en Russie 2007 dans le Caucase - 2008 dans le Caucase - 2009 dans le Caucase - 2010 dans le Caucase - 2011 dans le Caucase 2007 par pays en Europe - 2008 par pays en Europe - 2009 par pays en Europe - 2010 par pays en E...

 

 

Cotswold beralih ke halaman ini. Untuk kegunaan lain, lihat Cotswold (disambiguasi). Cotswolds Protected Area St James, dan Banqueting House, Chipping Campden Negara Inggris County Gloucestershire, Oxfordshire, Somerset, Warwickshire, Wiltshire, Worcestershire. Titik tertinggi  - lokasi Bukit Cleeve  - elevasi 330 m (1.083 ft) Geology Jurassic, Oolitic, Limestone Plant Hawkweed, bunga Pasque, Thistle, Yellow Archangel. Animal Badger, Goldfinch, kicuit batu, Treecreepe...

Daerah Khusus Ibukota Jakarta IIIDaerah Pemilihan / Daerah pemilihanuntuk Dewan Perwakilan RakyatRepublik IndonesiaWilayah Daftar Kabupaten : Kepulauan Seribu Kota : Jakarta Barat Jakarta Utara ProvinsiDKI JakartaPopulasi4.484.955 (2023)[1]Elektorat3.272.524 (2024)[2]Daerah pemilihan saat iniDibentuk2009Kursi8Anggota  Kamrussamad (Gerindra)  Effendi Simbolon (PDI-P)  Darmadi Durianto (PDI-P)  Charles Honoris (PDI-P)  Ahmad Sahroni (NasDem)...

 

 

Nigerian general (1954–2015) Major generalSuraj AbdurrahmanCONCommand Officer in Charge of the Armed Forces of LiberiaIn office6 June 2007 – 11 February 2014PresidentEllen Johnson SirleafPreceded byMaj-Gen. Luka YusufSucceeded byMaj-Gen. Daniel Dee Ziankhan Personal detailsBornSuraj Alao Abdurrahman(1954-09-09)9 September 1954Kaduna, Northern Region, British Nigeria (now in Kaduna State, Nigeria)Died28 January 2015(2015-01-28) (aged 60)New York City, New York, U.S.Education ...

 

 

Town in Mandalay Region, MyanmarWundwinTownWundwinLocation in BurmaCoordinates: 21°5′N 96°2′E / 21.083°N 96.033°E / 21.083; 96.033Country MyanmarRegion Mandalay RegionDistrictMeiktila DistrictTownshipWundwin TownshipPopulation (2005) • ReligionsBuddhismTime zoneUTC+6.30 (MST) Wundwin (Burmese: ဝမ်းတွင်းမြို့) is a town in the Mandalay Region of central Myanmar. Wundwin, alongside Amarapura, is a major domes...

Wallachian nobleman You can help expand this article with text translated from the corresponding article in Romanian. (August 2013) Click [show] for important translation instructions. Machine translation, like DeepL or Google Translate, is a useful starting point for translations, but translators must revise errors as necessary and confirm that the translation is accurate, rather than simply copy-pasting machine-translated text into the English Wikipedia. Consider adding a topic to this...

 

 

Railway station in Sant Cugat del Vallès, Spain Hospital Generalcommuter stationGeneral informationLocationSpainCoordinates41°28′34″N 2°02′48″E / 41.47611°N 2.04667°E / 41.47611; 2.04667Owned byFGCLine(s)S1, S5Tracks2ConstructionStructure typeAbovegroundOther informationStation code622Fare zone2CHistoryOpened1985Passengers2018637,009[1] Services Preceding station FGC Following station Mira-soltowards Barcelona Pl. Catalunya S1 Rubítowards Terrassa...

 

 

Ця стаття потребує додаткових посилань на джерела для поліпшення її перевірності. Будь ласка, допоможіть удосконалити цю статтю, додавши посилання на надійні (авторитетні) джерела. Зверніться на сторінку обговорення за поясненнями та допоможіть виправити недоліки. Мат...

Play by John Fletcher Not to be confused with the Women's Prize for Fiction. The Woman's Prize, or the Tamer Tamed is a Jacobean comedy written by John Fletcher. It was first published in the first Beaumont and Fletcher folio of 1647, though it was written several decades earlier (Fletcher died in 1625). There is no doubt that the play is the work of Fletcher alone; his highly distinctive and characteristic pattern of linguistic preferences is continuous through the text.[1] The play ...

 

 

Senate of the parliament of the Irish Free State (1922–1936) This article is about the historical Seanad Éireann of the Irish Free State. For the modern Irish senate, see Seanad Éireann. Seanad ÉireannGreat Seal of the Irish Free StateTypeTypeUpper house of Irish Free StateHistoryEstablished11 December 1922 (1922-12-11)Disbanded29 May 1936 (1936-05-29)Preceded bySenate of Southern IrelandSucceeded bySeanad ÉireannLeadershipCathaoirleachLord Glenav...

 

 

US presidential order Ending Discriminatory Bans on Entry to The United StatesPresidential proclamationSigned byJoe BidenSignedJanuary 20, 2021 (2021-01-20) This article is part of a series aboutJoe Biden Political positions Electoral history Early life and career Eponyms Family Honors Public image U.S. Senator from Delaware Judiciary Committee Bork hearings Thomas hearings 1994 Crime Bill Violence Against Women Act Foreign Relations Committee Elections: 1972 1978 1984 199...

Observance of recitation in religious Judaism Part of a series onJudaism     Movements Orthodox Haredi Hasidic Modern Conservative Conservadox Reform Karaite Reconstructionist Renewal Humanistic Haymanot Philosophy Principles of faith Kabbalah Messiah Ethics Chosenness God Names Musar movement Texts Tanakh Torah Nevi'im Ketuvim Ḥumash Siddur Piyutim Zohar Rabbinic Mishnah Talmud Midrash Tosefta Law Mishneh Torah Tur Shulchan Aruch Mishnah Berurah Aruch HaShulchan Kashrut...

 

 

Esercito ItalianoStemma dell'Esercito Italiano Descrizione generaleAttiva18 giugno 1946 - oggi[1] Nazione Italia ServizioForza armata TipoEsercito Dimensione94.026 unità (oltre a  5.431 civili)[2] Stato Maggiore dell'EsercitoPalazzo Esercito,Roma SoprannomeStato maggiore dell'esercito italiano Patronosan Giovanni XXIII[3] MottoSalus rei publicae suprema lex estoSia la salvezza dello Stato la legge suprema ColoriIl distintivo su pendente in cuoio si compone d...