CINXE.COM

WebSocket - Wikipedia

<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>WebSocket - Wikipedia</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )enwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy", "wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"423ce737-5569-4c25-bad5-8069762f5bac","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"WebSocket","wgTitle":"WebSocket","wgCurRevisionId":1250439164,"wgRevisionId":1250439164,"wgArticleId":25553718,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Webarchive template wayback links","Articles with short description","Short description matches Wikidata","Application layer protocols","HTML5","Internet terminology","Network socket","Real-time web","Web development","2011 in computing"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"WebSocket","wgRelevantArticleId":25553718,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[], "wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgFlaggedRevsParams":{"tags":{"status":{"levels":1}}},"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":50000,"wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false,"wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q859938","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false, "wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","ext.pygments":"ready","ext.math.styles":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","jquery.tablesorter.styles":"ready","jquery.makeCollapsible.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements","ext.pygments.view","site","mediawiki.page.ready","jquery.tablesorter","jquery.makeCollapsible","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.ReferenceTooltips","ext.gadget.switcher", "ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.cx.uls.quick.actions","wikibase.client.vector-2022","ext.checkUser.clientHints","ext.growthExperiments.SuggestedEditSession","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=ext.cite.styles%7Cext.math.styles%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cjquery.makeCollapsible.styles%7Cjquery.tablesorter.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&amp;only=styles&amp;skin=vector-2022"> <script async="" src="/w/load.php?lang=en&amp;modules=startup&amp;only=scripts&amp;raw=1&amp;skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&amp;modules=site.styles&amp;only=styles&amp;skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/1/10/Websocket_connection.png"> <meta property="og:image:width" content="1200"> <meta property="og:image:height" content="1104"> <meta property="og:image" content="https://upload.wikimedia.org/wikipedia/commons/1/10/Websocket_connection.png"> <meta property="og:image:width" content="800"> <meta property="og:image:height" content="736"> <meta property="og:image:width" content="640"> <meta property="og:image:height" content="589"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="WebSocket - Wikipedia"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//en.m.wikipedia.org/wiki/WebSocket"> <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/w/index.php?title=WebSocket&amp;action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (en)"> <link rel="EditURI" type="application/rsd+xml" href="//en.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://en.wikipedia.org/wiki/WebSocket"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en"> <link rel="alternate" type="application/atom+xml" title="Wikipedia Atom feed" href="/w/index.php?title=Special:RecentChanges&amp;feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-WebSocket rootpage-WebSocket skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-contents" class="mw-list-item"><a href="/wiki/Wikipedia:Contents" title="Guides to browsing Wikipedia"><span>Contents</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:Current_events" title="Articles related to current events"><span>Current events</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Visit a randomly selected article [x]" accesskey="x"><span>Random article</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikipedia:About" title="Learn about Wikipedia and how it works"><span>About Wikipedia</span></a></li><li id="n-contactpage" class="mw-list-item"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us" title="How to contact Wikipedia"><span>Contact us</span></a></li> </ul> </div> </div> <div id="p-interaction" class="vector-menu mw-portlet mw-portlet-interaction" > <div class="vector-menu-heading"> Contribute </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Help:Contents" title="Guidance on how to use and edit Wikipedia"><span>Help</span></a></li><li id="n-introduction" class="mw-list-item"><a href="/wiki/Help:Introduction" title="Learn how to edit Wikipedia"><span>Learn to edit</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:Community_portal" title="The hub for editors"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes to Wikipedia [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_upload_wizard" title="Add images or other media for use on Wikipedia"><span>Upload file</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Main_Page" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="The Free Encyclopedia" src="/static/images/mobile/copyright/wikipedia-tagline-en.svg" width="117" height="13" style="width: 7.3125em; height: 0.8125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search Wikipedia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search Wikipedia" aria-label="Search Wikipedia" autocapitalize="sentences" title="Search Wikipedia [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page&#039;s font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=C13_en.wikipedia.org&amp;uselang=en" class=""><span>Donate</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&amp;returnto=WebSocket" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&amp;returnto=WebSocket" title="You&#039;re encouraged to log in; however, it&#039;s not mandatory. [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Log in and more options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&amp;utm_medium=sidebar&amp;utm_campaign=C13_en.wikipedia.org&amp;uselang=en"><span>Donate</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&amp;returnto=WebSocket" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&amp;returnto=WebSocket" title="You&#039;re encouraged to log in; however, it&#039;s not mandatory. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">(Top)</div> </a> </li> <li id="toc-History" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#History"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>History</span> </div> </a> <ul id="toc-History-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Client_example" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Client_example"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Client example</span> </div> </a> <ul id="toc-Client_example-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Server_example" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Server_example"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Server example</span> </div> </a> <ul id="toc-Server_example-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Web_API" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Web_API"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Web API</span> </div> </a> <ul id="toc-Web_API-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Protocol" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Protocol"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>Protocol</span> </div> </a> <button aria-controls="toc-Protocol-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Protocol subsection</span> </button> <ul id="toc-Protocol-sublist" class="vector-toc-list"> <li id="toc-Opening_handshake" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Opening_handshake"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.1</span> <span>Opening handshake</span> </div> </a> <ul id="toc-Opening_handshake-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Frame-based_message" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Frame-based_message"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.2</span> <span>Frame-based message</span> </div> </a> <ul id="toc-Frame-based_message-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Frame_structure" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Frame_structure"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.3</span> <span>Frame structure</span> </div> </a> <ul id="toc-Frame_structure-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Opcodes" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Opcodes"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.4</span> <span>Opcodes</span> </div> </a> <ul id="toc-Opcodes-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Status_codes" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Status_codes"> <div class="vector-toc-text"> <span class="vector-toc-numb">5.5</span> <span>Status codes</span> </div> </a> <ul id="toc-Status_codes-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Browser_support" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Browser_support"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>Browser support</span> </div> </a> <ul id="toc-Browser_support-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Server_implementations" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Server_implementations"> <div class="vector-toc-text"> <span class="vector-toc-numb">7</span> <span>Server implementations</span> </div> </a> <ul id="toc-Server_implementations-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Security_considerations" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Security_considerations"> <div class="vector-toc-text"> <span class="vector-toc-numb">8</span> <span>Security considerations</span> </div> </a> <ul id="toc-Security_considerations-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Proxy_traversal" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Proxy_traversal"> <div class="vector-toc-text"> <span class="vector-toc-numb">9</span> <span>Proxy traversal</span> </div> </a> <ul id="toc-Proxy_traversal-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-See_also" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#See_also"> <div class="vector-toc-text"> <span class="vector-toc-numb">10</span> <span>See also</span> </div> </a> <ul id="toc-See_also-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Notes" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Notes"> <div class="vector-toc-text"> <span class="vector-toc-numb">11</span> <span>Notes</span> </div> </a> <ul id="toc-Notes-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-References" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#References"> <div class="vector-toc-text"> <span class="vector-toc-numb">12</span> <span>References</span> </div> </a> <ul id="toc-References-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-External_links" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#External_links"> <div class="vector-toc-text"> <span class="vector-toc-numb">13</span> <span>External links</span> </div> </a> <ul id="toc-External_links-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">WebSocket</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Go to an article in another language. Available in 27 languages" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-27" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">27 languages</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-ar mw-list-item"><a href="https://ar.wikipedia.org/wiki/%D9%85%D9%82%D8%A8%D8%B3_%D9%88%D9%8A%D8%A8" title="مقبس ويب – Arabic" lang="ar" hreflang="ar" data-title="مقبس ويب" data-language-autonym="العربية" data-language-local-name="Arabic" class="interlanguage-link-target"><span>العربية</span></a></li><li class="interlanguage-link interwiki-zh-min-nan mw-list-item"><a href="https://zh-min-nan.wikipedia.org/wiki/WebSocket" title="WebSocket – Minnan" lang="nan" hreflang="nan" data-title="WebSocket" data-language-autonym="閩南語 / Bân-lâm-gú" data-language-local-name="Minnan" class="interlanguage-link-target"><span>閩南語 / Bân-lâm-gú</span></a></li><li class="interlanguage-link interwiki-bg mw-list-item"><a href="https://bg.wikipedia.org/wiki/WebSocket" title="WebSocket – Bulgarian" lang="bg" hreflang="bg" data-title="WebSocket" data-language-autonym="Български" data-language-local-name="Bulgarian" class="interlanguage-link-target"><span>Български</span></a></li><li class="interlanguage-link interwiki-ca mw-list-item"><a href="https://ca.wikipedia.org/wiki/WebSocket" title="WebSocket – Catalan" lang="ca" hreflang="ca" data-title="WebSocket" data-language-autonym="Català" data-language-local-name="Catalan" class="interlanguage-link-target"><span>Català</span></a></li><li class="interlanguage-link interwiki-cs mw-list-item"><a href="https://cs.wikipedia.org/wiki/WebSocket" title="WebSocket – Czech" lang="cs" hreflang="cs" data-title="WebSocket" data-language-autonym="Čeština" data-language-local-name="Czech" class="interlanguage-link-target"><span>Čeština</span></a></li><li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikipedia.org/wiki/WebSocket" title="WebSocket – German" lang="de" hreflang="de" data-title="WebSocket" data-language-autonym="Deutsch" data-language-local-name="German" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-et mw-list-item"><a href="https://et.wikipedia.org/wiki/WebSocket" title="WebSocket – Estonian" lang="et" hreflang="et" data-title="WebSocket" data-language-autonym="Eesti" data-language-local-name="Estonian" class="interlanguage-link-target"><span>Eesti</span></a></li><li class="interlanguage-link interwiki-el mw-list-item"><a href="https://el.wikipedia.org/wiki/WebSocket" title="WebSocket – Greek" lang="el" hreflang="el" data-title="WebSocket" data-language-autonym="Ελληνικά" data-language-local-name="Greek" class="interlanguage-link-target"><span>Ελληνικά</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/WebSocket" title="WebSocket – Spanish" lang="es" hreflang="es" data-title="WebSocket" data-language-autonym="Español" data-language-local-name="Spanish" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%D9%88%D8%A8%E2%80%8C%D8%B3%D9%88%DA%A9%D8%AA" title="وب‌سوکت – Persian" lang="fa" hreflang="fa" data-title="وب‌سوکت" data-language-autonym="فارسی" data-language-local-name="Persian" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-fr mw-list-item"><a href="https://fr.wikipedia.org/wiki/WebSocket" title="WebSocket – French" lang="fr" hreflang="fr" data-title="WebSocket" data-language-autonym="Français" data-language-local-name="French" class="interlanguage-link-target"><span>Français</span></a></li><li class="interlanguage-link interwiki-ko mw-list-item"><a href="https://ko.wikipedia.org/wiki/%EC%9B%B9%EC%86%8C%EC%BC%93" title="웹소켓 – Korean" lang="ko" hreflang="ko" data-title="웹소켓" data-language-autonym="한국어" data-language-local-name="Korean" class="interlanguage-link-target"><span>한국어</span></a></li><li class="interlanguage-link interwiki-hy mw-list-item"><a href="https://hy.wikipedia.org/wiki/WebSocket" title="WebSocket – Armenian" lang="hy" hreflang="hy" data-title="WebSocket" data-language-autonym="Հայերեն" data-language-local-name="Armenian" class="interlanguage-link-target"><span>Հայերեն</span></a></li><li class="interlanguage-link interwiki-id mw-list-item"><a href="https://id.wikipedia.org/wiki/WebSocket" title="WebSocket – Indonesian" lang="id" hreflang="id" data-title="WebSocket" data-language-autonym="Bahasa Indonesia" data-language-local-name="Indonesian" class="interlanguage-link-target"><span>Bahasa Indonesia</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/WebSocket" title="WebSocket – Italian" lang="it" hreflang="it" data-title="WebSocket" data-language-autonym="Italiano" data-language-local-name="Italian" class="interlanguage-link-target"><span>Italiano</span></a></li><li class="interlanguage-link interwiki-hu mw-list-item"><a href="https://hu.wikipedia.org/wiki/WebSocket" title="WebSocket – Hungarian" lang="hu" hreflang="hu" data-title="WebSocket" data-language-autonym="Magyar" data-language-local-name="Hungarian" class="interlanguage-link-target"><span>Magyar</span></a></li><li class="interlanguage-link interwiki-ms mw-list-item"><a href="https://ms.wikipedia.org/wiki/WebSocket" title="WebSocket – Malay" lang="ms" hreflang="ms" data-title="WebSocket" data-language-autonym="Bahasa Melayu" data-language-local-name="Malay" class="interlanguage-link-target"><span>Bahasa Melayu</span></a></li><li class="interlanguage-link interwiki-nl mw-list-item"><a href="https://nl.wikipedia.org/wiki/WebSocket" title="WebSocket – Dutch" lang="nl" hreflang="nl" data-title="WebSocket" data-language-autonym="Nederlands" data-language-local-name="Dutch" class="interlanguage-link-target"><span>Nederlands</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/WebSocket" title="WebSocket – Japanese" lang="ja" hreflang="ja" data-title="WebSocket" data-language-autonym="日本語" data-language-local-name="Japanese" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-pl mw-list-item"><a href="https://pl.wikipedia.org/wiki/WebSocket" title="WebSocket – Polish" lang="pl" hreflang="pl" data-title="WebSocket" data-language-autonym="Polski" data-language-local-name="Polish" class="interlanguage-link-target"><span>Polski</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/WebSocket" title="WebSocket – Portuguese" lang="pt" hreflang="pt" data-title="WebSocket" data-language-autonym="Português" data-language-local-name="Portuguese" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/WebSocket" title="WebSocket – Russian" lang="ru" hreflang="ru" data-title="WebSocket" data-language-autonym="Русский" data-language-local-name="Russian" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-sv mw-list-item"><a href="https://sv.wikipedia.org/wiki/Websocket" title="Websocket – Swedish" lang="sv" hreflang="sv" data-title="Websocket" data-language-autonym="Svenska" data-language-local-name="Swedish" class="interlanguage-link-target"><span>Svenska</span></a></li><li class="interlanguage-link interwiki-tr mw-list-item"><a href="https://tr.wikipedia.org/wiki/WebSocket" title="WebSocket – Turkish" lang="tr" hreflang="tr" data-title="WebSocket" data-language-autonym="Türkçe" data-language-local-name="Turkish" class="interlanguage-link-target"><span>Türkçe</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/WebSocket" title="WebSocket – Ukrainian" lang="uk" hreflang="uk" data-title="WebSocket" data-language-autonym="Українська" data-language-local-name="Ukrainian" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-vi mw-list-item"><a href="https://vi.wikipedia.org/wiki/WebSocket" title="WebSocket – Vietnamese" lang="vi" hreflang="vi" data-title="WebSocket" data-language-autonym="Tiếng Việt" data-language-local-name="Vietnamese" class="interlanguage-link-target"><span>Tiếng Việt</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/WebSocket" title="WebSocket – Chinese" lang="zh" hreflang="zh" data-title="WebSocket" data-language-autonym="中文" data-language-local-name="Chinese" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q859938#sitelinks-wikipedia" title="Edit interlanguage links" class="wbc-editpage">Edit links</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/WebSocket" title="View the content page [c]" accesskey="c"><span>Article</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Talk:WebSocket" rel="discussion" title="Discuss improvements to the content page [t]" accesskey="t"><span>Talk</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/WebSocket"><span>Read</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=WebSocket&amp;action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=WebSocket&amp;action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/WebSocket"><span>Read</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=WebSocket&amp;action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=WebSocket&amp;action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/WebSocket" title="List of all English Wikipedia pages containing links to this page [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/WebSocket" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_Upload_Wizard" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=WebSocket&amp;oldid=1250439164" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=WebSocket&amp;action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&amp;page=WebSocket&amp;id=1250439164&amp;wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&amp;url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FWebSocket"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&amp;url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FWebSocket"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&amp;page=WebSocket&amp;action=show-download-screen" title="Download this page as a PDF file"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=WebSocket&amp;printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> In other projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q859938" title="Structured data on this page hosted by Wikidata [g]" accesskey="g"><span>Wikidata item</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">From Wikipedia, the free encyclopedia</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><div class="shortdescription nomobile noexcerpt noprint searchaux" style="display:none">Computer network protocol</div> <style data-mw-deduplicate="TemplateStyles:r1257001546">.mw-parser-output .infobox-subbox{padding:0;border:none;margin:-3px;width:auto;min-width:100%;font-size:100%;clear:none;float:none;background-color:transparent}.mw-parser-output .infobox-3cols-child{margin:auto}.mw-parser-output .infobox .navbar{font-size:100%}@media screen{html.skin-theme-clientpref-night .mw-parser-output .infobox-full-data:not(.notheme)>div:not(.notheme)[style]{background:#1f1f23!important;color:#f8f9fa}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .infobox-full-data:not(.notheme) div:not(.notheme){background:#1f1f23!important;color:#f8f9fa}}@media(min-width:640px){body.skin--responsive .mw-parser-output .infobox-table{display:table!important}body.skin--responsive .mw-parser-output .infobox-table>caption{display:table-caption!important}body.skin--responsive .mw-parser-output .infobox-table>tbody{display:table-row-group}body.skin--responsive .mw-parser-output .infobox-table tr{display:table-row!important}body.skin--responsive .mw-parser-output .infobox-table th,body.skin--responsive .mw-parser-output .infobox-table td{padding-left:inherit;padding-right:inherit}}</style><table class="infobox vevent"><caption class="infobox-title summary">WebSocket</caption><tbody><tr><td colspan="2" class="infobox-image"><span class="mw-default-size" typeof="mw:File/Frameless"><a href="/wiki/File:Websocket_connection.png" class="mw-file-description"><img src="//upload.wikimedia.org/wikipedia/commons/thumb/1/10/Websocket_connection.png/220px-Websocket_connection.png" decoding="async" width="220" height="202" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/commons/1/10/Websocket_connection.png 1.5x" data-file-width="249" data-file-height="229" /></a></span><div class="infobox-caption">A diagram describing a connection using WebSocket</div></td></tr><tr><th scope="row" class="infobox-label">International standard</th><td class="infobox-data"><style data-mw-deduplicate="TemplateStyles:r1238218222">.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}</style><a href="/wiki/RFC_(identifier)" class="mw-redirect" title="RFC (identifier)">RFC</a>&#160;<a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a></td></tr><tr><th scope="row" class="infobox-label">Developed by</th><td class="infobox-data"><a href="/wiki/Internet_Engineering_Task_Force" title="Internet Engineering Task Force">IETF</a></td></tr><tr><th scope="row" class="infobox-label">Industry</th><td class="infobox-data"><a href="/wiki/Computer_science" title="Computer science">Computer science</a></td></tr><tr><th scope="row" class="infobox-label">Connector type</th><td class="infobox-data"><a href="/wiki/Transmission_Control_Protocol" title="Transmission Control Protocol">TCP</a></td></tr><tr><th scope="row" class="infobox-label">Website</th><td class="infobox-data url"><span><span><a rel="nofollow" class="external free" href="https://websockets.spec.whatwg.org/">https://websockets.spec.whatwg.org/</a></span></span></td></tr></tbody></table> <p><b>WebSocket</b> is a computer <a href="/wiki/Communications_protocol" class="mw-redirect" title="Communications protocol">communications protocol</a>, providing a <a href="/wiki/Full-duplex" class="mw-redirect" title="Full-duplex">simultaneous two-way</a> communication channel over a single <a href="/wiki/Transmission_Control_Protocol" title="Transmission Control Protocol">Transmission Control Protocol</a> (TCP) connection. The WebSocket protocol was standardized by the <a href="/wiki/Internet_Engineering_Task_Force" title="Internet Engineering Task Force">IETF</a> as <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><a href="/wiki/RFC_(identifier)" class="mw-redirect" title="RFC (identifier)">RFC</a>&#160;<a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a> in 2011. The current specification allowing web applications to use this protocol is known as <i>WebSockets</i>.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">&#91;</span>1<span class="cite-bracket">&#93;</span></a></sup> It is a living standard maintained by the <a href="/wiki/Web_Hypertext_Application_Technology_Working_Group" class="mw-redirect" title="Web Hypertext Application Technology Working Group">WHATWG</a> and a successor to <i>The WebSocket API</i> from the <a href="/wiki/World_Wide_Web_Consortium" title="World Wide Web Consortium">W3C</a>.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">&#91;</span>2<span class="cite-bracket">&#93;</span></a></sup> </p><p>WebSocket is distinct from <a href="/wiki/HTTP" title="HTTP">HTTP</a> used to serve most webpages. Although they are different, <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><a href="/wiki/RFC_(identifier)" class="mw-redirect" title="RFC (identifier)">RFC</a>&#160;<a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a> states that WebSocket "is designed to work over HTTP ports 443 and 80 as well as to support HTTP proxies and intermediaries", thus making it compatible with HTTP. To achieve compatibility, the WebSocket <a href="/wiki/Handshake_(computing)" title="Handshake (computing)">handshake</a> uses the <a href="/wiki/HTTP/1.1_Upgrade_header" title="HTTP/1.1 Upgrade header">HTTP Upgrade header</a><sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">&#91;</span>3<span class="cite-bracket">&#93;</span></a></sup> to change from the HTTP protocol to the WebSocket protocol. </p><p>The WebSocket protocol enables <a href="/wiki/Duplex_(telecommunications)#Full_duplex" title="Duplex (telecommunications)">full-duplex</a> interaction between a <a href="/wiki/Web_browser" title="Web browser">web browser</a> (or other <a href="/wiki/Client_(computing)" title="Client (computing)">client</a> application) and a <a href="/wiki/Web_server" title="Web server">web server</a> with lower overhead than half-duplex alternatives such as HTTP <a href="/wiki/Polling_(computer_science)" title="Polling (computer science)">polling</a>, facilitating real-time data transfer from and to the server. This is made possible by providing a standardized way for the server to send content to the client without being first requested by the client, and allowing messages to be passed back and forth while keeping the connection open. In this way, a two-way ongoing conversation can take place between the client and the server. The communications are usually done over TCP <a href="/wiki/Port_(computer_networking)" title="Port (computer networking)">port</a> number 443 (or 80 in the case of unsecured connections), which is beneficial for environments that block non-web Internet connections using a <a href="/wiki/Firewall_(computing)" title="Firewall (computing)">firewall</a>. Additionally, WebSocket enables streams of messages on top of TCP. TCP alone deals with streams of bytes with no inherent concept of a message. Similar two-way browser–server communications have been achieved in non-standardized ways using stopgap technologies such as <a href="/wiki/Comet_(programming)" title="Comet (programming)">Comet</a> or <a href="/wiki/Adobe_Flash_Player" title="Adobe Flash Player">Adobe Flash Player</a>.<sup id="cite_ref-4" class="reference"><a href="#cite_note-4"><span class="cite-bracket">&#91;</span>4<span class="cite-bracket">&#93;</span></a></sup> </p><p>Most browsers support the protocol, including <a href="/wiki/Google_Chrome" title="Google Chrome">Google Chrome</a>, <a href="/wiki/Firefox" title="Firefox">Firefox</a>, <a href="/wiki/Microsoft_Edge" title="Microsoft Edge">Microsoft Edge</a>, <a href="/wiki/Internet_Explorer" title="Internet Explorer">Internet Explorer</a>, <a href="/wiki/Safari_(web_browser)" title="Safari (web browser)">Safari</a> and <a href="/wiki/Opera_web_browser" class="mw-redirect" title="Opera web browser">Opera</a>.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">&#91;</span>5<span class="cite-bracket">&#93;</span></a></sup> </p><p>The WebSocket protocol specification defines <code>ws</code> (WebSocket) and <code>wss</code> (WebSocket Secure) as two new <a href="/wiki/Uniform_resource_identifier" class="mw-redirect" title="Uniform resource identifier">uniform resource identifier</a> (URI) schemes<sup id="cite_ref-6" class="reference"><a href="#cite_note-6"><span class="cite-bracket">&#91;</span>6<span class="cite-bracket">&#93;</span></a></sup> that are used for unencrypted and encrypted connections respectively. Apart from the scheme name and <a href="/wiki/Fragment_identifier" class="mw-redirect" title="Fragment identifier">fragment</a> (i.e. <code>#</code> is not supported), the rest of the URI components are defined to use <a href="/wiki/Path_segment" class="mw-redirect" title="Path segment">URI generic syntax</a>.<sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">&#91;</span>7<span class="cite-bracket">&#93;</span></a></sup> </p> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="History">History</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=WebSocket&amp;action=edit&amp;section=1" title="Edit section: History"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>WebSocket was first referenced as TCPConnection in the <a href="/wiki/HTML5" title="HTML5">HTML5</a> specification, as a placeholder for a TCP-based socket API.<sup id="cite_ref-8" class="reference"><a href="#cite_note-8"><span class="cite-bracket">&#91;</span>8<span class="cite-bracket">&#93;</span></a></sup> In June 2008, a series of discussions were led by <a href="/wiki/Michael_Carter_(entrepreneur)" class="mw-redirect" title="Michael Carter (entrepreneur)">Michael Carter</a> that resulted in the first version of the protocol known as WebSocket.<sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">&#91;</span>9<span class="cite-bracket">&#93;</span></a></sup> Before WebSocket, port 80 full-duplex communication was attainable using <a href="/wiki/Comet_(programming)" title="Comet (programming)">Comet</a> channels; however, Comet implementation is nontrivial, and due to the TCP handshake and HTTP header overhead, it is inefficient for small messages. The WebSocket protocol aims to solve these problems without compromising the security assumptions of the web. The name "WebSocket" was coined by <a href="/wiki/Ian_Hickson" title="Ian Hickson">Ian Hickson</a> and Michael Carter shortly thereafter through collaboration on the #whatwg IRC chat room,<sup id="cite_ref-10" class="reference"><a href="#cite_note-10"><span class="cite-bracket">&#91;</span>10<span class="cite-bracket">&#93;</span></a></sup> and subsequently authored for inclusion in the HTML5 specification by Ian Hickson. In December 2009, Google Chrome 4 was the first browser to ship full support for the standard, with WebSocket enabled by default.<sup id="cite_ref-11" class="reference"><a href="#cite_note-11"><span class="cite-bracket">&#91;</span>11<span class="cite-bracket">&#93;</span></a></sup> Development of the WebSocket protocol was subsequently moved from the W3C and <a href="/wiki/WHATWG" title="WHATWG">WHATWG</a> group to the IETF in February 2010, and authored for two revisions under Ian Hickson.<sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">&#91;</span>12<span class="cite-bracket">&#93;</span></a></sup> </p><p>After the protocol was shipped and enabled by default in multiple browsers, the <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><a href="/wiki/RFC_(identifier)" class="mw-redirect" title="RFC (identifier)">RFC</a>&#160;<a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a> was finalized under Ian Fette in December 2011. </p><p><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><a href="/wiki/RFC_(identifier)" class="mw-redirect" title="RFC (identifier)">RFC</a>&#160;<a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc7692">7692</a> introduced compression extension to WebSocket using the <a href="/wiki/DEFLATE" class="mw-redirect" title="DEFLATE">DEFLATE</a> algorithm on a per-message basis. </p> <div class="mw-heading mw-heading2"><h2 id="Client_example">Client example</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=WebSocket&amp;action=edit&amp;section=2" title="Edit section: Client example"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-highlight mw-highlight-lang-html mw-content-ltr" dir="ltr"><pre><span></span><span class="cp">&lt;!DOCTYPE html&gt;</span> <span class="p">&lt;</span><span class="nt">script</span><span class="p">&gt;</span> <span class="c1">// Connect to server</span> <span class="nx">ws</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="ow">new</span><span class="w"> </span><span class="nx">WebSocket</span><span class="p">(</span><span class="s2">&quot;ws://127.0.0.1/scoreboard&quot;</span><span class="p">)</span><span class="w"> </span><span class="c1">// Local server</span> <span class="c1">// ws = new WebSocket(&quot;wss://game.example.com/scoreboard&quot;) // Remote server</span> <span class="nx">ws</span><span class="p">.</span><span class="nx">onopen</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">&quot;Connection opened&quot;</span><span class="p">)</span> <span class="w"> </span><span class="nx">ws</span><span class="p">.</span><span class="nx">send</span><span class="p">(</span><span class="s2">&quot;Hi server, please send me the score of yesterday&#39;s game&quot;</span><span class="p">)</span> <span class="p">}</span> <span class="nx">ws</span><span class="p">.</span><span class="nx">onmessage</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="nx">event</span><span class="p">)</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">&quot;Data received&quot;</span><span class="p">,</span><span class="w"> </span><span class="nx">event</span><span class="p">.</span><span class="nx">data</span><span class="p">)</span> <span class="w"> </span><span class="nx">ws</span><span class="p">.</span><span class="nx">close</span><span class="p">()</span><span class="w"> </span><span class="c1">// We got the score so we don&#39;t need the connection anymore</span> <span class="p">}</span> <span class="nx">ws</span><span class="p">.</span><span class="nx">onclose</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">(</span><span class="nx">event</span><span class="p">)</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">&quot;Connection closed&quot;</span><span class="p">,</span><span class="w"> </span><span class="nx">event</span><span class="p">.</span><span class="nx">code</span><span class="p">,</span><span class="w"> </span><span class="nx">event</span><span class="p">.</span><span class="nx">reason</span><span class="p">,</span><span class="w"> </span><span class="nx">event</span><span class="p">.</span><span class="nx">wasClean</span><span class="p">)</span> <span class="p">}</span> <span class="nx">ws</span><span class="p">.</span><span class="nx">onerror</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="p">()</span><span class="w"> </span><span class="p">=&gt;</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s2">&quot;Connection closed due to error&quot;</span><span class="p">)</span> <span class="p">}</span> <span class="p">&lt;/</span><span class="nt">script</span><span class="p">&gt;</span> </pre></div> <div class="mw-heading mw-heading2"><h2 id="Server_example">Server example</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=WebSocket&amp;action=edit&amp;section=3" title="Edit section: Server example"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-highlight mw-highlight-lang-python3 mw-content-ltr" dir="ltr"><pre><span></span><span class="kn">from</span> <span class="nn">socket</span> <span class="kn">import</span> <span class="n">socket</span> <span class="kn">from</span> <span class="nn">base64</span> <span class="kn">import</span> <span class="n">b64encode</span> <span class="kn">from</span> <span class="nn">hashlib</span> <span class="kn">import</span> <span class="n">sha1</span> <span class="n">MAGIC</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&quot;258EAFA5-E914-47DA-95CA-C5AB0DC85B11&quot;</span> <span class="c1"># Create socket and listen at port 80</span> <span class="n">ws</span> <span class="o">=</span> <span class="n">socket</span><span class="p">()</span> <span class="n">ws</span><span class="o">.</span><span class="n">bind</span><span class="p">((</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="mi">80</span><span class="p">))</span> <span class="n">ws</span><span class="o">.</span><span class="n">listen</span><span class="p">()</span> <span class="n">conn</span><span class="p">,</span> <span class="n">addr</span> <span class="o">=</span> <span class="n">ws</span><span class="o">.</span><span class="n">accept</span><span class="p">()</span> <span class="c1"># Parse request</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">conn</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">4096</span><span class="p">)</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">b</span><span class="s2">&quot;</span><span class="se">\r\n</span><span class="s2">&quot;</span><span class="p">):</span> <span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="sa">b</span><span class="s2">&quot;Sec-WebSocket-Key&quot;</span><span class="p">):</span> <span class="n">nonce</span> <span class="o">=</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">b</span><span class="s2">&quot;:&quot;</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="c1"># Format response</span> <span class="n">response</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;</span><span class="se">\</span> <span class="s2">HTTP/1.1 101 Switching Protocols</span> <span class="s2">Upgrade: websocket</span> <span class="s2">Connection: Upgrade</span> <span class="s2">Sec-WebSocket-Accept: </span><span class="si">{</span><span class="n">b64encode</span><span class="p">(</span><span class="n">sha1</span><span class="p">(</span><span class="n">nonce</span><span class="w"> </span><span class="o">+</span><span class="w"> </span><span class="n">MAGIC</span><span class="p">)</span><span class="o">.</span><span class="n">digest</span><span class="p">())</span><span class="o">.</span><span class="n">decode</span><span class="p">()</span><span class="si">}</span> <span class="s2">&quot;&quot;&quot;</span> <span class="n">conn</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\r\n</span><span class="s2">&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">())</span> <span class="k">while</span> <span class="kc">True</span><span class="p">:</span> <span class="c1"># decode messages from the client</span> <span class="n">header</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="n">FIN</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="n">header</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&amp;</span> <span class="mh">0x80</span><span class="p">)</span> <span class="c1"># bit 0</span> <span class="k">assert</span> <span class="n">FIN</span> <span class="o">==</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;We only support unfragmented messages&quot;</span> <span class="n">opcode</span> <span class="o">=</span> <span class="n">header</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">&amp;</span> <span class="mh">0xf</span> <span class="c1"># bits 4-7</span> <span class="k">assert</span> <span class="n">opcode</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">or</span> <span class="n">opcode</span> <span class="o">==</span> <span class="mi">2</span><span class="p">,</span> <span class="s2">&quot;We only support data messages&quot;</span> <span class="n">masked</span> <span class="o">=</span> <span class="nb">bool</span><span class="p">(</span><span class="n">header</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">&amp;</span> <span class="mh">0x80</span><span class="p">)</span> <span class="c1"># bit 8</span> <span class="k">assert</span> <span class="n">masked</span><span class="p">,</span> <span class="s2">&quot;The client must mask all frames&quot;</span> <span class="n">payload_size</span> <span class="o">=</span> <span class="n">header</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">&amp;</span> <span class="mh">0x7f</span> <span class="c1"># bits 9-15</span> <span class="k">assert</span> <span class="n">payload_size</span> <span class="o">&lt;=</span> <span class="mi">125</span><span class="p">,</span> <span class="s2">&quot;We only support small messages&quot;</span> <span class="n">masking_key</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">4</span><span class="p">)</span> <span class="n">payload</span> <span class="o">=</span> <span class="nb">bytearray</span><span class="p">(</span><span class="n">conn</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="n">payload_size</span><span class="p">))</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">payload_size</span><span class="p">):</span> <span class="n">payload</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">payload</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">^</span> <span class="n">masking_key</span><span class="p">[</span><span class="n">i</span> <span class="o">%</span> <span class="mi">4</span><span class="p">]</span> <span class="nb">print</span><span class="p">(</span><span class="n">payload</span><span class="p">)</span> </pre></div> <div class="mw-heading mw-heading2"><h2 id="Web_API">Web API</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=WebSocket&amp;action=edit&amp;section=4" title="Edit section: Web API"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A web application (e.g. web browser) may use the <code>WebSocket</code> interface to connect to a WebSocket server. </p> <table class="wikitable"> <caption>WebSocket web API specification </caption> <tbody><tr> <th>Type </th> <th>Name<sup id="cite_ref-13" class="reference"><a href="#cite_note-13"><span class="cite-bracket">&#91;</span>13<span class="cite-bracket">&#93;</span></a></sup> </th> <th>Description </th></tr> <tr> <td><a href="/wiki/Constructor_(object-oriented_programming)" title="Constructor (object-oriented programming)">Constructor</a> </td> <td><code>ws = new <b>WebSocket</b>(url [, protocols ])</code> </td> <td><b>Start</b> <b>opening handshake</b> with a WebSocket server.<sup id="cite_ref-14" class="reference"><a href="#cite_note-14"><span class="cite-bracket">&#91;</span>14<span class="cite-bracket">&#93;</span></a></sup> <ul><li><code>url</code>: A string containing: <ul><li>Scheme: must be <code>ws</code>, <code>wss</code>, <code>http</code> or <code>https</code>.</li> <li>Server hostname.</li> <li>Optional server port: If not specified, 80 is used for ws/http and 443 for wss/https.</li> <li>Optional path.</li> <li><b>No</b> fragment. There must not be any fragment, otherwise <code>SyntaxError</code> is thrown.</li></ul></li> <li>Optional <code>protocols</code>: A string or an array of strings used as the value for the <code>Sec-WebSocket-Protocol</code> header.</li></ul> </td></tr> <tr> <td rowspan="2"><a href="/wiki/Method_(computer_programming)" title="Method (computer programming)">Method</a> </td> <td><code>ws.<b>send</b>(data)</code> </td> <td><b>Send data</b>. <code>data</code> must be <code>string</code>, <code>Blob</code>, <code>ArrayBuffer</code> or <code>ArrayBufferView</code>. Throw <code>InvalidStateError</code> if <code>ws.readyState</code> is <code>WebSocket.CONNECTING</code>. </td></tr> <tr> <td><code>ws.<b>close</b>([ code ] [, reason ])</code> </td> <td><b>Start</b> <b>closing handshake</b>.<sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">&#91;</span>15<span class="cite-bracket">&#93;</span></a></sup> <ul><li>Optional <code>code</code>: If specified, must be 1000 (normal closure) or in the range 3000 to 4999 (application-defined), otherwise <code>InvalidAccessError</code> is thrown. If not specified, 1000 is used.</li> <li>Optional <code>reason</code>: If specified, must be a string not longer than 123 bytes (<a href="/wiki/UTF-8" title="UTF-8">UTF-8</a>), otherwise <code>SyntaxError</code> is thrown. If not specified, an empty string is used.</li></ul> </td></tr> <tr> <td rowspan="4"><a href="/wiki/Event_(computing)" title="Event (computing)">Event</a> </td> <td><code>ws.<b>onopen</b> = (event) =&gt; {}</code> <p><code>ws.addEventListener(<b>"open"</b>, (event) =&gt; {})</code> </p> </td> <td><b>Opening handshake succeeded</b>. <code>event</code> type is <code>Event</code>. </td></tr> <tr> <td><code>ws.<b>onmessage</b> = (event) =&gt; {}</code> <p><code><span class="nowrap">ws.addEventListener(<b>"message"</b>, (event) =&gt; {})</span></code> </p> </td> <td><b>Data received.</b> <code>event</code> type is <code>MessageEvent</code>. <code>event.data</code> contains the data received, of type:<sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">&#91;</span>16<span class="cite-bracket">&#93;</span></a></sup> <ul><li><code>String</code> for text.</li> <li><code>Blob</code> or <code>ArrayBuffer</code> for binary (see <code>ws.binaryType</code>).</li></ul> </td></tr> <tr> <td><code>ws.<b>onclose</b> = (event) =&gt; {}</code> <p><code>ws.addEventListener(<b>"close"</b>, (event) =&gt; {})</code> </p> </td> <td>The underlying <b>TCP connection closed</b>. <code>event</code> type is <code>CloseEvent</code> containing:<sup id="cite_ref-:1_17-0" class="reference"><a href="#cite_note-:1-17"><span class="cite-bracket">&#91;</span>17<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-:2_18-0" class="reference"><a href="#cite_note-:2-18"><span class="cite-bracket">&#91;</span>18<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-19" class="reference"><a href="#cite_note-19"><span class="cite-bracket">&#91;</span>19<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">&#91;</span>20<span class="cite-bracket">&#93;</span></a></sup> <ul><li><code>event.code</code>: <a class="mw-selflink-fragment" href="#Status_codes">status code</a> (integer).</li> <li><code>event.reason</code>: reason for closing (string).</li> <li><code>event.wasClean</code>: <code>true</code> if the TCP connection was closed after the closing handshake was completed; <code>false</code> otherwise.</li></ul> <p>Note: </p> <ul><li>If the received Close frame contains a <b>payload</b>: the payload data contains <code>event.code</code> and <code>event.reason</code>.</li></ul> <ul><li>If the received Close frame contains <b>no payload</b>: <code>event.code</code> is 1005 (no code received) and <code>event.reason</code> is an empty string.</li></ul> <ul><li>If <b>no Close frame</b> was received: <code>event.code</code> is 1006 (connection closed abnormally) and <code>event.reason</code> is an empty string.</li></ul> </td></tr> <tr> <td><code>ws.<b>onerror</b> = (event) =&gt; {}</code> <p><code>ws.addEventListener(<b>"error"</b>, (event) =&gt; {})</code> </p> </td> <td><b>Connection closed due to error</b>. <code>event</code> type is <code>Event</code>. </td></tr> <tr> <td><a href="/wiki/Attribute_(computing)" title="Attribute (computing)">Attribute</a> </td> <td><code>ws.<b>binaryType</b></code> </td> <td>A string indicating the type of <code>event.data</code> in <code>ws.onmessage</code> when binary data is received. Initially set to <code>"blob"</code> (<code>Blob</code> object). May be changed to <code>"arraybuffer"</code> (<code>ArrayBuffer</code> object). </td></tr> <tr> <td rowspan="5">Read-only attribute </td> <td><code>ws.<b>url</b></code> </td> <td>The URL given to the WebSocket constructor. </td></tr> <tr> <td><code>ws.<b>bufferedAmount</b></code> </td> <td>The number of bytes waiting to be transmitted. </td></tr> <tr> <td><code>ws.<b>protocol</b></code> </td> <td>The protocol accepted by the server, or an empty string if the client did not specify <code>protocols</code> in the <code>WebSocket</code> constructor. </td></tr> <tr> <td><code>ws.<b>extensions</b></code> </td> <td>The extensions accepted by the server. </td></tr> <tr> <td><code>ws.<b>readyState</b></code> </td> <td>The connection state. It is one of the constants below. </td></tr> <tr> <td rowspan="4"><a href="/wiki/Constant_(computer_programming)" title="Constant (computer programming)">Constant</a> </td> <td><code>WebSocket.<b>CONNECTING</b> = 0</code> </td> <td><b>Waiting opening handshake</b>.<sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">&#91;</span>21<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-22" class="reference"><a href="#cite_note-22"><span class="cite-bracket">&#91;</span>22<span class="cite-bracket">&#93;</span></a></sup> </td></tr> <tr> <td><code>WebSocket.<b>OPEN</b> = 1</code> </td> <td><b>Opening handshake succeeded</b>. The client and server may message each other.<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">&#91;</span>23<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span class="cite-bracket">&#91;</span>24<span class="cite-bracket">&#93;</span></a></sup> </td></tr> <tr> <td><code>WebSocket.<b>CLOSING</b> = 2</code> </td> <td><b>Waiting</b> <b>closing handshake</b>. Either <code>ws.close()</code> was called or the server sent a Close frame.<sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">&#91;</span>25<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-26" class="reference"><a href="#cite_note-26"><span class="cite-bracket">&#91;</span>26<span class="cite-bracket">&#93;</span></a></sup> </td></tr> <tr> <td><code>WebSocket.<b>CLOSED</b> = 3</code> </td> <td>The underlying <b>TCP connection is closed</b>.<sup id="cite_ref-27" class="reference"><a href="#cite_note-27"><span class="cite-bracket">&#91;</span>27<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-:1_17-1" class="reference"><a href="#cite_note-:1-17"><span class="cite-bracket">&#91;</span>17<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-:2_18-1" class="reference"><a href="#cite_note-:2-18"><span class="cite-bracket">&#91;</span>18<span class="cite-bracket">&#93;</span></a></sup> </td></tr></tbody></table> <div class="mw-heading mw-heading2"><h2 id="Protocol">Protocol</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=WebSocket&amp;action=edit&amp;section=5" title="Edit section: Protocol"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Steps: </p> <ol><li><b><a class="mw-selflink-fragment" href="#Opening_handshake">Opening handshake</a></b> (<a href="/wiki/HTTP#HTTP/1.1_request_messages" title="HTTP">HTTP request</a> + <a href="/wiki/HTTP#HTTP/1.1_response_messages" title="HTTP">HTTP response</a>) to establish a connection.</li> <li><b>Data messages</b> to transfer application data.</li> <li><b><a class="mw-selflink-fragment" href="#Closing_handshake">Closing handshake</a></b> (two Close frames) to close the connection.</li></ol> <div class="mw-heading mw-heading3"><h3 id="Opening_handshake">Opening handshake</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=WebSocket&amp;action=edit&amp;section=6" title="Edit section: Opening handshake"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>The client sends an <b>HTTP request</b> (<b><a href="/wiki/HTTP#Request_methods" title="HTTP">method</a></b> <b>GET</b>, <b><a href="/wiki/HTTP#Summary_of_HTTP_milestone_versions" title="HTTP">version</a> ≥ 1.1</b>) and the server returns an <b>HTTP response</b> with <b><a href="/wiki/List_of_HTTP_status_codes#101" title="List of HTTP status codes">status code 101</a></b> (<i>Switching Protocols</i>) on success. This means a WebSocket server can use the same port as HTTP (80) and HTTPS (443) because the handshake is compatible with HTTP.<sup id="cite_ref-28" class="reference"><a href="#cite_note-28"><span class="cite-bracket">&#91;</span>28<span class="cite-bracket">&#93;</span></a></sup> </p> <table class="wikitable" style="text-align:center"> <caption>HTTP headers </caption> <tbody><tr> <th class="nowrap ts-vertical-header" style=""><div style=""><style data-mw-deduplicate="TemplateStyles:r1221560606">@supports(writing-mode:vertical-rl){.mw-parser-output .ts-vertical-header{line-height:1;max-width:1em;padding:0.4em;vertical-align:bottom;width:1em}html.client-js .mw-parser-output .sortable:not(.jquery-tablesorter) .ts-vertical-header:not(.unsortable),html.client-js .mw-parser-output .ts-vertical-header.headerSort{background-position:50%.4em;padding-right:0.4em;padding-top:21px}.mw-parser-output .ts-vertical-header.is-valign-top{vertical-align:top}.mw-parser-output .ts-vertical-header.is-valign-middle{vertical-align:middle}.mw-parser-output .ts-vertical-header.is-normal{font-weight:normal}.mw-parser-output .ts-vertical-header>*{display:inline-block;transform:rotate(180deg);writing-mode:vertical-rl}@supports(writing-mode:sideways-lr){.mw-parser-output .ts-vertical-header>*{transform:none;writing-mode:sideways-lr}}}</style>Side</div> </th> <th>Header </th> <th>Value </th> <th>Mandatory </th></tr> <tr> <td rowspan="4" class="nowrap ts-vertical-header is-valign-middle" style=""><div style=""><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1221560606">Request</div> </td> <td><a href="/wiki/List_of_HTTP_header_fields#origin-request-header" title="List of HTTP header fields">Origin</a> </td> <td data-sort-value="" style="background: #EEE; color:black; vertical-align: middle; text-align: center;" class="table-na">Varies </td> <td style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes (for browser clients)<sup id="cite_ref-29" class="reference"><a href="#cite_note-29"><span class="cite-bracket">&#91;</span>29<span class="cite-bracket">&#93;</span></a></sup> </td></tr> <tr> <td><a href="/wiki/List_of_HTTP_header_fields#host-request-header" title="List of HTTP header fields">Host</a> </td> <td data-sort-value="" style="background: #EEE; color:black; vertical-align: middle; text-align: center;" class="table-na">Varies </td> <td rowspan="6" style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes </td></tr> <tr> <td>Sec-WebSocket-Version </td> <td><i>13</i><sup id="cite_ref-30" class="reference"><a href="#cite_note-30"><span class="cite-bracket">&#91;</span>30<span class="cite-bracket">&#93;</span></a></sup> </td></tr> <tr> <td>Sec-WebSocket-Key </td> <td><a href="/wiki/Base64" title="Base64">base64</a>-encode(16-byte random <a href="/wiki/Cryptographic_nonce" title="Cryptographic nonce">nonce</a>)<sup id="cite_ref-31" class="reference"><a href="#cite_note-31"><span class="cite-bracket">&#91;</span>31<span class="cite-bracket">&#93;</span></a></sup> </td></tr> <tr> <td class="nowrap ts-vertical-header" style=""><div style=""><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1221560606">Response</div> </td> <td>Sec-WebSocket-Accept </td> <td>base64-encode(<a href="/wiki/SHA-1" title="SHA-1">sha1</a>(Sec-WebSocket-Key + <span class="nowrap"><a href="/wiki/Magic_number_(programming)" title="Magic number (programming)">"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"</a></span>))<sup id="cite_ref-32" class="reference"><a href="#cite_note-32"><span class="cite-bracket">&#91;</span>32<span class="cite-bracket">&#93;</span></a></sup> </td></tr> <tr> <td rowspan="5" class="nowrap ts-vertical-header is-valign-middle" style=""><div style=""><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1221560606">Both</div> </td> <td>Connection </td> <td><i>Upgrade</i><sup id="cite_ref-33" class="reference"><a href="#cite_note-33"><span class="cite-bracket">&#91;</span>33<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-34" class="reference"><a href="#cite_note-34"><span class="cite-bracket">&#91;</span>34<span class="cite-bracket">&#93;</span></a></sup> </td></tr> <tr> <td><a href="/wiki/HTTP/1.1_Upgrade_header" title="HTTP/1.1 Upgrade header">Upgrade</a> </td> <td><i>websocket</i><sup id="cite_ref-35" class="reference"><a href="#cite_note-35"><span class="cite-bracket">&#91;</span>35<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-36" class="reference"><a href="#cite_note-36"><span class="cite-bracket">&#91;</span>36<span class="cite-bracket">&#93;</span></a></sup> </td></tr> <tr> <td>Sec-WebSocket-Protocol </td> <td>The request may contain a <a href="/wiki/Comma-separated_list" class="mw-redirect" title="Comma-separated list">comma-separated list</a> of strings (ordered by preference) indicating <a href="/wiki/Application_layer" title="Application layer">application-level protocols</a> (built on top of WebSocket data messages) the client wishes to use.<sup id="cite_ref-37" class="reference"><a href="#cite_note-37"><span class="cite-bracket">&#91;</span>37<span class="cite-bracket">&#93;</span></a></sup> If the client sends this header, the server response must be one of the values from the list. </td> <td rowspan="3" style="background: #DFD; color:black; vertical-align: middle; text-align: center;">Optional </td></tr> <tr> <td>Sec-WebSocket-Extensions </td> <td> </td></tr> <tr> <td><a href="/wiki/List_of_HTTP_header_fields" title="List of HTTP header fields">Other headers</a> </td> <td data-sort-value="" style="background: #EEE; color:black; vertical-align: middle; text-align: center;" class="table-na">Varies </td></tr></tbody></table><p> Example request:<sup id="cite_ref-38" class="reference"><a href="#cite_note-38"><span class="cite-bracket">&#91;</span>38<span class="cite-bracket">&#93;</span></a></sup></p><div class="mw-highlight mw-highlight-lang-http mw-content-ltr" dir="ltr"><pre><span></span><span class="nf">GET</span> <span class="nn">/chat</span> <span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span> <span class="na">Host</span><span class="o">:</span> <span class="l">server.example.com</span> <span class="na">Upgrade</span><span class="o">:</span> <span class="l">websocket</span> <span class="na">Connection</span><span class="o">:</span> <span class="l">Upgrade</span> <span class="na">Sec-WebSocket-Key</span><span class="o">:</span> <span class="l">x3JJHMbDL1EzLkh9GBhXDw==</span> <span class="na">Sec-WebSocket-Protocol</span><span class="o">:</span> <span class="l">chat, superchat</span> <span class="na">Sec-WebSocket-Version</span><span class="o">:</span> <span class="l">13</span> <span class="na">Origin</span><span class="o">:</span> <span class="l">http://example.com</span> </pre></div> <p>Example response: </p> <div class="mw-highlight mw-highlight-lang-http mw-content-ltr" dir="ltr"><pre><span></span><span class="kr">HTTP</span><span class="o">/</span><span class="m">1.1</span> <span class="m">101</span> <span class="ne">Switching Protocols</span> <span class="na">Upgrade</span><span class="o">:</span> <span class="l">websocket</span> <span class="na">Connection</span><span class="o">:</span> <span class="l">Upgrade</span> <span class="na">Sec-WebSocket-Accept</span><span class="o">:</span> <span class="l">HSmrc0sMlYUkAGmm5OPpG2HaGWk=</span> <span class="na">Sec-WebSocket-Protocol</span><span class="o">:</span> <span class="l">chat</span> </pre></div><p> In HTTP each line ends in <code>\r\n</code> and the last line is empty.</p><div class="mw-highlight mw-highlight-lang-python3 mw-content-ltr" dir="ltr"><pre><span></span><span class="c1"># Calculate Sec-WebSocket-Accept using Sec-WebSocket-Key</span> <span class="kn">from</span> <span class="nn">base64</span> <span class="kn">import</span> <span class="n">b64encode</span> <span class="kn">from</span> <span class="nn">hashlib</span> <span class="kn">import</span> <span class="n">sha1</span> <span class="kn">from</span> <span class="nn">os</span> <span class="kn">import</span> <span class="n">urandom</span> <span class="c1"># key = b64encode(urandom(16)) # Client should do this</span> <span class="n">key</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&quot;x3JJHMbDL1EzLkh9GBhXDw==&quot;</span> <span class="c1"># Value in example request above</span> <span class="n">magic</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&quot;258EAFA5-E914-47DA-95CA-C5AB0DC85B11&quot;</span> <span class="c1"># Protocol constant</span> <span class="nb">print</span><span class="p">(</span><span class="n">b64encode</span><span class="p">(</span><span class="n">sha1</span><span class="p">(</span><span class="n">key</span> <span class="o">+</span> <span class="n">magic</span><span class="p">)</span><span class="o">.</span><span class="n">digest</span><span class="p">()))</span> <span class="c1"># Output: HSmrc0sMlYUkAGmm5OPpG2HaGWk=</span> </pre></div><p>Once the connection is established, communication switches to a binary frame-based protocol which does not conform to the HTTP protocol. </p><p><code>Sec-WebSocket-Key</code> and <code>Sec-WebSocket-Accept</code> are intended to prevent a <a href="/wiki/Cache_(computing)" title="Cache (computing)">caching</a> <a href="/wiki/HTTP_proxy" class="mw-redirect" title="HTTP proxy">proxy</a> from re-sending a previous WebSocket conversation,<sup id="cite_ref-39" class="reference"><a href="#cite_note-39"><span class="cite-bracket">&#91;</span>39<span class="cite-bracket">&#93;</span></a></sup> and does not provide any authentication, privacy, or integrity. </p><p>Though some servers accept a short <code>Sec-WebSocket-Key</code>, many modern servers will reject the request with error "invalid Sec-WebSocket-Key header". </p> <div class="mw-heading mw-heading3"><h3 id="Frame-based_message">Frame-based message</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=WebSocket&amp;action=edit&amp;section=7" title="Edit section: Frame-based message"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>After the opening handshake, the client and server can, at any time, send messages to each other, such as <b>data messages</b> (text or binary) and <b>control messages</b> (close, ping, pong). A message is composed of one or more frames. </p><p><b>Fragmentation</b> allows a message to be split into two or more frames. It enables sending messages with initial data available but complete length unknown. Without fragmentation, the whole message must be sent in one frame, so the complete length is needed before the first byte can be sent, which requires a buffer.<sup id="cite_ref-40" class="reference"><a href="#cite_note-40"><span class="cite-bracket">&#91;</span>40<span class="cite-bracket">&#93;</span></a></sup> It also enables multiplexing several streams simultaneously (e.g. to avoid monopolizing a socket for a single large <a href="/wiki/Payload_(computing)" title="Payload (computing)">payload</a>).<sup id="cite_ref-41" class="reference"><a href="#cite_note-41"><span class="cite-bracket">&#91;</span>41<span class="cite-bracket">&#93;</span></a></sup> </p> <ul><li>An <b>unfragmented message</b> consists of a single frame with <b><code>FIN = 1</code></b> and <b><code>opcode ≠ 0</code></b>.</li> <li>A <b>fragmented message</b> consists of a single frame with <b><code>FIN = 0</code></b> and <b><code>opcode ≠ 0</code></b>, followed by zero or more frames with <b><code>FIN = 0</code></b> and <b><code>opcode = 0</code></b>, and terminated by a single frame with <b><code>FIN = 1</code></b> and <b><code>opcode = 0</code></b>.</li></ul> <div class="mw-heading mw-heading3"><h3 id="Frame_structure">Frame structure</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=WebSocket&amp;action=edit&amp;section=8" title="Edit section: Frame structure"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <table class="wikitable"> <tbody><tr> <th><a href="/wiki/Array_index" class="mw-redirect" title="Array index">Index</a><br />(in&#160;bits) </th> <th colspan="2">Field </th> <th>Size<br />(in&#160;bits) </th> <th>Description </th></tr> <tr> <td>0 </td> <td colspan="2">FIN<sup id="cite_ref-42" class="reference"><a href="#cite_note-42"><span class="cite-bracket">&#91;</span>42<span class="cite-bracket">&#93;</span></a></sup> </td> <td>1 </td> <td><div><ul><li>1 = final frame of a message.</li><li>0 = message is fragmented and this is not the final frame.</li></ul></div> </td></tr> <tr> <td>1 </td> <td colspan="2">RSV1 </td> <td>1 </td> <td rowspan="3"><b>Must be 0</b> unless defined by an extension.<sup id="cite_ref-43" class="reference"><a href="#cite_note-43"><span class="cite-bracket">&#91;</span>43<span class="cite-bracket">&#93;</span></a></sup> </td></tr> <tr> <td>2 </td> <td colspan="2">RSV2 </td> <td>1 </td></tr> <tr> <td>3 </td> <td colspan="2">RSV3 </td> <td>1 </td></tr> <tr> <td>4 </td> <td colspan="2"><a href="/wiki/Operation_code" class="mw-redirect" title="Operation code">Opcode</a> </td> <td>4 </td> <td>See <a class="mw-selflink-fragment" href="#Opcodes">opcodes</a> below. </td></tr> <tr> <td>8 </td> <td colspan="2"><a href="/wiki/Data_masking" title="Data masking">Masked</a><sup id="cite_ref-44" class="reference"><a href="#cite_note-44"><span class="cite-bracket">&#91;</span>44<span class="cite-bracket">&#93;</span></a></sup> </td> <td>1 </td> <td><div><ul><li>1 = frame is masked and masking key is present.</li><li>0 = frame is not masked and masking key is not present.</li></ul></div> See <a class="mw-selflink-fragment" href="#Client-to-server_masking">client-to-server masking</a> below. </td></tr> <tr> <td>9 </td> <td colspan="2">Payload length<sup id="cite_ref-:0_45-0" class="reference"><a href="#cite_note-:0-45"><span class="cite-bracket">&#91;</span>45<span class="cite-bracket">&#93;</span></a></sup> </td> <td>7, 7+16 or 7+64 </td> <td>Length of the payload (extension data + application data) in bytes. <div><ul><li><b>0–125</b> = This is the payload length.</li><li><b>126</b> = The following 16 bits are the payload length.</li><li><b>127</b> = The following 64 bits (<a href="/wiki/Most_Significant_Bit" class="mw-redirect" title="Most Significant Bit">MSB</a> must be 0) are the payload length.</li></ul></div> <a href="/wiki/Endianness" title="Endianness">Endianness</a> is big-endian. <a href="/wiki/Signedness" title="Signedness">Signedness</a> is unsigned. The minimum number of bits must be used to encode the length. </td></tr> <tr> <td rowspan="3">Varies </td> <td colspan="2">Masking key </td> <td>0 or 32 </td> <td><span class="anchor" id="Client-to-server_masking"></span><span class="nowrap">A <b>client must mask</b> all frames sent to the server.</span> A <b>server must not mask</b> any frames sent to the client.<sup id="cite_ref-46" class="reference"><a href="#cite_note-46"><span class="cite-bracket">&#91;</span>46<span class="cite-bracket">&#93;</span></a></sup> Frame masking applies <a href="/wiki/Exclusive_or" title="Exclusive or">XOR</a> between the masking key (a four-byte random nonce) and the payload data. The following algorithm is used to mask/unmask a frame:<sup id="cite_ref-47" class="reference"><a href="#cite_note-47"><span class="cite-bracket">&#91;</span>47<span class="cite-bracket">&#93;</span></a></sup><div class="mw-highlight mw-highlight-lang-text mw-content-ltr" dir="ltr"><pre><span></span>for i = 0 to payload_length - 1 payload[i] = payload[i] xor masking_key[i modulo 4] </pre></div> </td></tr> <tr> <td rowspan="2">Payload </td> <td>Extension data </td> <td rowspan="2">Payload length (in bytes) </td> <td><b>Must be empty</b> unless defined by an extension. </td></tr> <tr> <td>Application data </td> <td style="background: #FED; color:black; vertical-align: middle; text-align: center;" class="depends table-depends">Depends on the opcode. </td></tr></tbody></table> <div class="mw-heading mw-heading3"><h3 id="Opcodes">Opcodes</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=WebSocket&amp;action=edit&amp;section=9" title="Edit section: Opcodes"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <table class="wikitable"> <tbody><tr> <th colspan="2">Frame type </th> <th>Opcode </th> <th>Related <p><a class="mw-selflink-fragment" href="#Web_API">Web API</a> </p> </th> <th>Description </th> <th>Purpose </th> <th class="nowrap ts-vertical-header" style=""><div style=""><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1221560606">Fragmentable</div> </th> <th>Max. payload length </th></tr> <tr> <td colspan="2" align="center">Continuation </td> <td>0 </td> <td> </td> <td>Identifies an intermediate frame of a fragmented message. </td> <td> </td> <td> </td> <td rowspan="3"><span class="nowrap">&#8288;<span class="mwe-math-element"><span class="mwe-math-mathml-inline mwe-math-mathml-a11y" style="display: none;"><math xmlns="http://www.w3.org/1998/Math/MathML" alttext="{\displaystyle 2^{63}-1}"> <semantics> <mrow class="MJX-TeXAtom-ORD"> <mstyle displaystyle="true" scriptlevel="0"> <msup> <mn>2</mn> <mrow class="MJX-TeXAtom-ORD"> <mn>63</mn> </mrow> </msup> <mo>&#x2212;<!-- − --></mo> <mn>1</mn> </mstyle> </mrow> <annotation encoding="application/x-tex">{\displaystyle 2^{63}-1}</annotation> </semantics> </math></span><img src="https://wikimedia.org/api/rest_v1/media/math/render/svg/aa62b8610964c71f742a81ea0cb1e4da5aba91bb" class="mwe-math-fallback-image-inline mw-invert skin-invert" aria-hidden="true" style="vertical-align: -0.505ex; width:7.042ex; height:2.843ex;" alt="{\displaystyle 2^{63}-1}"></span>&#8288;</span> bytes </td></tr> <tr> <td rowspan="2">Data frame </td> <td>Text </td> <td>1 </td> <td rowspan="2"><code>send()</code>, <span class="nowrap"><code><span class="nowrap">onmessage</span></code></span> </td> <td>UTF-8 encoded application text. </td> <td rowspan="2">Application data </td> <td rowspan="2" style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes </td></tr> <tr> <td>Binary </td> <td>2 </td> <td>Application binary data. </td></tr> <tr> <td colspan="2"> </td> <td>3–7 </td> <td> </td> <td data-sort-value="" style="background: var(--background-color-interactive, #ececec); color: var(--color-base, inherit); vertical-align: middle; text-align: center;" class="table-na">Reserved </td> <td> </td> <td> </td> <td> </td></tr> <tr> <td rowspan="3">Control frame </td> <td>Close </td> <td>8 </td> <td><code>close()</code>, <code>onclose</code> </td> <td><span class="anchor" id="Closing_handshake"></span>A Close frame is sent to <b>start</b> <b>the closing handshake</b> which may prevent data loss by complementing the <a href="/wiki/Transmission_Control_Protocol#Connection_termination" title="Transmission Control Protocol">TCP closing handshake</a>.<sup id="cite_ref-48" class="reference"><a href="#cite_note-48"><span class="cite-bracket">&#91;</span>48<span class="cite-bracket">&#93;</span></a></sup> No frame can be sent after a Close frame. If a Close frame is received and no prior Close frame was sent, a response Close frame with the same payload must be sent. The payload is optional, but if present, it must start with a two-byte big-endian unsigned integer <a class="mw-selflink-fragment" href="#Status_codes">reason code</a>, optionally followed by a UTF-8 encoded reason message not longer than 123 bytes.<sup id="cite_ref-49" class="reference"><a href="#cite_note-49"><span class="cite-bracket">&#91;</span>49<span class="cite-bracket">&#93;</span></a></sup> </td> <td rowspan="3">Protocol state </td> <td rowspan="3" style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No </td> <td rowspan="3">125 bytes </td></tr> <tr> <td>Ping </td> <td>9 </td> <td> </td> <td rowspan="2"><span class="nowrap">May be used for <a href="/wiki/Latency_(engineering)" title="Latency (engineering)">latency</a> measurement</span>, <a href="/wiki/Keepalive" title="Keepalive">keepalive</a> and <a href="/wiki/Heartbeat_(computing)" title="Heartbeat (computing)">heartbeat</a>. Both sides can initiate a ping (with any payload). Whoever receives it must immediately send back a pong with the same payload. A pong should be ignored if no prior ping was sent.<sup id="cite_ref-50" class="reference"><a href="#cite_note-50"><span class="cite-bracket">&#91;</span>50<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-51" class="reference"><a href="#cite_note-51"><span class="cite-bracket">&#91;</span>51<span class="cite-bracket">&#93;</span></a></sup> </td></tr> <tr> <td>Pong </td> <td>10 </td> <td> </td></tr> <tr> <td colspan="2"> </td> <td>11–15 </td> <td> </td> <td data-sort-value="" style="background: var(--background-color-interactive, #ececec); color: var(--color-base, inherit); vertical-align: middle; text-align: center;" class="table-na">Reserved </td> <td> </td> <td> </td> <td> </td></tr></tbody></table> <div class="mw-heading mw-heading3"><h3 id="Status_codes">Status codes</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=WebSocket&amp;action=edit&amp;section=10" title="Edit section: Status codes"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <table class="wikitable"> <tbody><tr> <th>Range<sup id="cite_ref-52" class="reference"><a href="#cite_note-52"><span class="cite-bracket">&#91;</span>52<span class="cite-bracket">&#93;</span></a></sup> </th> <th>Allowed in Close frame </th> <th>Code <p><sup id="cite_ref-53" class="reference"><a href="#cite_note-53"><span class="cite-bracket">&#91;</span>53<span class="cite-bracket">&#93;</span></a></sup> </p> </th> <th>Description </th></tr> <tr> <td>0–999 </td> <td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No </td> <td> </td> <td data-sort-value="" style="background: var(--background-color-interactive, #ececec); color: var(--color-base, inherit); vertical-align: middle; text-align: center;" class="table-na">Unused </td></tr> <tr> <td rowspan="13">1000–2999 (Protocol) </td> <td rowspan="4" style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes </td> <td>1000 </td> <td>Normal closure. </td></tr> <tr> <td>1001 </td> <td>Going away (e.g. browser tab closed). </td></tr> <tr> <td>1002 </td> <td>Protocol error. </td></tr> <tr> <td>1003 </td> <td>Unsupported data (e.g. endpoint only understands text but received binary). </td></tr> <tr> <td rowspan="3" style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No </td> <td>1004 </td> <td data-sort-value="" style="background: var(--background-color-interactive, #ececec); color: var(--color-base, inherit); vertical-align: middle; text-align: center;" class="table-na">Reserved for future usage </td></tr> <tr> <td>1005 </td> <td>No code received. </td></tr> <tr> <td>1006 </td> <td>Connection closed abnormally (closing handshake did not occur). </td></tr> <tr> <td rowspan="5" style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes </td> <td>1007 </td> <td>Invalid payload data (e.g. non UTF-8 data in a text message). </td></tr> <tr> <td>1008 </td> <td>Policy violated. </td></tr> <tr> <td>1009 </td> <td>Message too big. </td></tr> <tr> <td>1010 </td> <td>Unsupported extension. The client should write the extensions it expected the server to support in the payload. </td></tr> <tr> <td>1011 </td> <td>Internal server error. </td></tr> <tr> <td style="background:#FFC7C7;color:black;vertical-align:middle;text-align:center;" class="table-no">No </td> <td>1015 </td> <td>TLS handshake failure. </td></tr> <tr> <td>3000–3999 </td> <td rowspan="2" style="background:#9EFF9E;color:black;vertical-align:middle;text-align:center;" class="table-yes">Yes </td> <td> </td> <td>Used by libraries, frameworks and applications. </td></tr> <tr> <td>4000–4999 </td> <td> </td> <td>Private use. </td></tr></tbody></table> <div class="mw-heading mw-heading2"><h2 id="Browser_support">Browser support</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=WebSocket&amp;action=edit&amp;section=11" title="Edit section: Browser support"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>A secure version of the WebSocket protocol is implemented in Firefox 6,<sup id="cite_ref-54" class="reference"><a href="#cite_note-54"><span class="cite-bracket">&#91;</span>54<span class="cite-bracket">&#93;</span></a></sup> Safari 6, Google Chrome 14,<sup id="cite_ref-55" class="reference"><a href="#cite_note-55"><span class="cite-bracket">&#91;</span>55<span class="cite-bracket">&#93;</span></a></sup> <a href="/wiki/Opera_(web_browser)" title="Opera (web browser)">Opera</a> 12.10 and <a href="/wiki/Internet_Explorer" title="Internet Explorer">Internet Explorer</a> 10.<sup id="cite_ref-56" class="reference"><a href="#cite_note-56"><span class="cite-bracket">&#91;</span>56<span class="cite-bracket">&#93;</span></a></sup> A detailed protocol test suite report<sup id="cite_ref-autobahn_57-0" class="reference"><a href="#cite_note-autobahn-57"><span class="cite-bracket">&#91;</span>57<span class="cite-bracket">&#93;</span></a></sup> lists the conformance of those browsers to specific protocol aspects. </p><p>An older, less secure version of the protocol was implemented in Opera 11 and <a href="/wiki/Safari_(web_browser)" title="Safari (web browser)">Safari</a> 5, as well as the mobile version of Safari in <a href="/wiki/IOS_4.2" class="mw-redirect" title="IOS 4.2">iOS 4.2</a>.<sup id="cite_ref-58" class="reference"><a href="#cite_note-58"><span class="cite-bracket">&#91;</span>58<span class="cite-bracket">&#93;</span></a></sup> The BlackBerry Browser in OS7 implements WebSockets.<sup id="cite_ref-59" class="reference"><a href="#cite_note-59"><span class="cite-bracket">&#91;</span>59<span class="cite-bracket">&#93;</span></a></sup> Because of vulnerabilities, it was disabled in Firefox 4 and 5,<sup id="cite_ref-60" class="reference"><a href="#cite_note-60"><span class="cite-bracket">&#91;</span>60<span class="cite-bracket">&#93;</span></a></sup> and Opera 11.<sup id="cite_ref-61" class="reference"><a href="#cite_note-61"><span class="cite-bracket">&#91;</span>61<span class="cite-bracket">&#93;</span></a></sup> Using browser developer tools, developers can inspect the WebSocket handshake as well as the WebSocket frames.<sup id="cite_ref-62" class="reference"><a href="#cite_note-62"><span class="cite-bracket">&#91;</span>62<span class="cite-bracket">&#93;</span></a></sup> </p> <table class="wikitable" style="text-align:right"> <tbody><tr> <th style="background:#EAECF0;background:linear-gradient(to top right,#EAECF0 49%,#AAA 49.5%,#AAA 50.5%,#EAECF0 51%);line-height:1.2;padding:0.1em 0.4em;"><div style="margin-left:2em;text-align:right">Protocol</div><div style="margin-right:2em;text-align:left">Version</div> </th> <th>Draft date </th> <th>Internet Explorer </th> <th>Firefox<sup id="cite_ref-63" class="reference"><a href="#cite_note-63"><span class="cite-bracket">&#91;</span>63<span class="cite-bracket">&#93;</span></a></sup><br />(PC) </th> <th>Firefox<br />(Android) </th> <th>Chrome<br />(PC, Mobile) </th> <th>Safari<br />(Mac, iOS) </th> <th>Opera<br />(PC, Mobile) </th> <th>Android Browser </th></tr> <tr> <th><a rel="nofollow" class="external text" href="https://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-75">hixie-75</a> </th> <td>February 4, 2010 </td> <td> </td> <td> </td> <td> </td> <td>4 </td> <td>5.0.0 </td> <td> </td> <td> </td></tr> <tr> <th><a rel="nofollow" class="external text" href="https://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76">hixie-76</a><br /><a rel="nofollow" class="external text" href="https://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-00">hybi-00</a> </th> <td>May 6, 2010<br />May 23, 2010 </td> <td> </td> <td>4.0<br />(disabled) </td> <td> </td> <td>6 </td> <td>5.0.1 </td> <td>11.00<br />(disabled) </td> <td> </td></tr> <tr> <th><a rel="nofollow" class="external text" href="https://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-07">hybi-07</a>, v7 </th> <td>April 22, 2011 </td> <td> </td> <td>6<sup id="cite_ref-64" class="reference"><a href="#cite_note-64"><span class="cite-bracket">&#91;</span>64<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-mozwebsocket_66-0" class="reference"><a href="#cite_note-mozwebsocket-66"><span class="cite-bracket">&#91;</span>a<span class="cite-bracket">&#93;</span></a></sup> </td> <td> </td> <td> </td> <td> </td> <td> </td> <td> </td></tr> <tr> <th><a rel="nofollow" class="external text" href="https://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-10">hybi-10</a>, v8 </th> <td>July 11, 2011 </td> <td> </td> <td>7<sup id="cite_ref-67" class="reference"><a href="#cite_note-67"><span class="cite-bracket">&#91;</span>66<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-mozwebsocket_66-1" class="reference"><a href="#cite_note-mozwebsocket-66"><span class="cite-bracket">&#91;</span>a<span class="cite-bracket">&#93;</span></a></sup> </td> <td>7 </td> <td>14<sup id="cite_ref-68" class="reference"><a href="#cite_note-68"><span class="cite-bracket">&#91;</span>67<span class="cite-bracket">&#93;</span></a></sup> </td> <td> </td> <td> </td> <td> </td></tr> <tr> <th><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><a href="/wiki/RFC_(identifier)" class="mw-redirect" title="RFC (identifier)">RFC</a>&#160;<a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>, v13 </th> <td>December, 2011 </td> <td>10<sup id="cite_ref-69" class="reference"><a href="#cite_note-69"><span class="cite-bracket">&#91;</span>68<span class="cite-bracket">&#93;</span></a></sup> </td> <td>11 </td> <td>11 </td> <td>16<sup id="cite_ref-70" class="reference"><a href="#cite_note-70"><span class="cite-bracket">&#91;</span>69<span class="cite-bracket">&#93;</span></a></sup> </td> <td>6 </td> <td>12.10<sup id="cite_ref-71" class="reference"><a href="#cite_note-71"><span class="cite-bracket">&#91;</span>70<span class="cite-bracket">&#93;</span></a></sup> </td> <td>4.4 </td></tr></tbody></table> <div class="mw-heading mw-heading2"><h2 id="Server_implementations">Server implementations</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=WebSocket&amp;action=edit&amp;section=12" title="Edit section: Server implementations"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/wiki/Nginx" title="Nginx">Nginx</a> has supported WebSockets since 2013, implemented in version 1.3.13<sup id="cite_ref-72" class="reference"><a href="#cite_note-72"><span class="cite-bracket">&#91;</span>71<span class="cite-bracket">&#93;</span></a></sup> including acting as a <a href="/wiki/Reverse_proxy" title="Reverse proxy">reverse proxy</a> and <a href="/wiki/Load_balancing_(computing)" title="Load balancing (computing)">load balancer</a> of WebSocket applications.<sup id="cite_ref-73" class="reference"><a href="#cite_note-73"><span class="cite-bracket">&#91;</span>72<span class="cite-bracket">&#93;</span></a></sup></li></ul> <ul><li><a href="/wiki/Apache_HTTP_Server" title="Apache HTTP Server">Apache HTTP Server</a> has supported WebSockets since July, 2013, implemented in version 2.4.5<sup id="cite_ref-74" class="reference"><a href="#cite_note-74"><span class="cite-bracket">&#91;</span>73<span class="cite-bracket">&#93;</span></a></sup><sup id="cite_ref-75" class="reference"><a href="#cite_note-75"><span class="cite-bracket">&#91;</span>74<span class="cite-bracket">&#93;</span></a></sup></li> <li><a href="/wiki/Internet_Information_Services" title="Internet Information Services">Internet Information Services</a> added support for WebSockets in version 8 which was released with <a href="/wiki/Windows_Server_2012" title="Windows Server 2012">Windows Server 2012</a>.<sup id="cite_ref-76" class="reference"><a href="#cite_note-76"><span class="cite-bracket">&#91;</span>75<span class="cite-bracket">&#93;</span></a></sup></li> <li><a href="/wiki/Lighttpd" title="Lighttpd">lighttpd</a> has supported WebSockets since 2017, implemented in lighttpd 1.4.46.<sup id="cite_ref-77" class="reference"><a href="#cite_note-77"><span class="cite-bracket">&#91;</span>76<span class="cite-bracket">&#93;</span></a></sup> lighttpd mod_proxy can act as a reverse proxy and load balancer of WebSocket applications. lighttpd mod_wstunnel can act as a WebSocket endpoint to transmit arbitrary data, including in <a href="/wiki/JSON" title="JSON">JSON</a> format, to a backend application. lighttpd supports WebSockets over HTTP/2 since 2022, implemented in lighttpd 1.4.65.<sup id="cite_ref-78" class="reference"><a href="#cite_note-78"><span class="cite-bracket">&#91;</span>77<span class="cite-bracket">&#93;</span></a></sup></li></ul> <div class="mw-heading mw-heading2"><h2 id="Security_considerations">Security considerations</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=WebSocket&amp;action=edit&amp;section=13" title="Edit section: Security considerations"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Unlike regular cross-domain HTTP requests, WebSocket requests are not restricted by the <a href="/wiki/Same-origin_policy" title="Same-origin policy">same-origin policy</a>. Therefore, WebSocket servers must validate the "Origin" header against the expected origins during connection establishment, to avoid cross-site WebSocket hijacking attacks (similar to <a href="/wiki/Cross-site_request_forgery" title="Cross-site request forgery">cross-site request forgery</a>), which might be possible when the connection is authenticated with <a href="/wiki/HTTP_cookie" title="HTTP cookie">cookies</a> or HTTP authentication. It is better to use tokens or similar protection mechanisms to authenticate the WebSocket connection when sensitive (private) data is being transferred over the WebSocket.<sup id="cite_ref-79" class="reference"><a href="#cite_note-79"><span class="cite-bracket">&#91;</span>78<span class="cite-bracket">&#93;</span></a></sup> A live example of vulnerability was seen in 2020 in the form of <a href="/wiki/Cable_Haunt" title="Cable Haunt">Cable Haunt</a>. </p> <div class="mw-heading mw-heading2"><h2 id="Proxy_traversal">Proxy traversal</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=WebSocket&amp;action=edit&amp;section=14" title="Edit section: Proxy traversal"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>WebSocket protocol client implementations try to detect whether the <a href="/wiki/User_agent" title="User agent">user agent</a> is configured to use a proxy when connecting to destination host and port, and if it is, uses <a href="/wiki/HTTP_tunnel#HTTP_CONNECT_method" title="HTTP tunnel">HTTP CONNECT</a> method to set up a persistent tunnel. </p><p>While the WebSocket protocol itself is unaware of proxy servers and firewalls, it features an HTTP-compatible handshake, thus allowing HTTP servers to share their default HTTP and HTTPS ports (80 and 443 respectively) with a WebSocket gateway or server. The WebSocket protocol defines a ws:// and wss:// prefix to indicate a WebSocket and a WebSocket Secure connection respectively. Both schemes use an <a href="/wiki/HTTP/1.1_Upgrade_header" title="HTTP/1.1 Upgrade header">HTTP upgrade mechanism</a> to upgrade to the WebSocket protocol. Some proxy servers are transparent and work fine with WebSocket; others will prevent WebSocket from working correctly, causing the connection to fail. In some cases, additional proxy-server configuration may be required, and certain proxy servers may need to be upgraded to support WebSocket. </p><p>If unencrypted WebSocket traffic flows through an explicit or a transparent proxy server without WebSockets support, the connection will likely fail.<sup id="cite_ref-80" class="reference"><a href="#cite_note-80"><span class="cite-bracket">&#91;</span>79<span class="cite-bracket">&#93;</span></a></sup> </p><p>If an encrypted WebSocket connection is used, then the use of <a href="/wiki/Transport_Layer_Security" title="Transport Layer Security">Transport Layer Security</a> (TLS) in the WebSocket Secure connection ensures that an <code>HTTP CONNECT</code> command is issued when the browser is configured to use an explicit proxy server. This sets up a tunnel, which provides low-level end-to-end TCP communication through the HTTP proxy, between the WebSocket Secure client and the WebSocket server. In the case of transparent proxy servers, the browser is unaware of the proxy server, so no <code>HTTP CONNECT</code> is sent. However, since the wire traffic is encrypted, intermediate transparent proxy servers may simply allow the encrypted traffic through, so there is a much better chance that the WebSocket connection will succeed if WebSocket Secure is used. Using encryption is not free of resource cost, but often provides the highest success rate, since it would be travelling through a secure tunnel. </p><p>A mid-2010 draft (version hixie-76) broke compatibility with <a href="/wiki/Reverse_proxy" title="Reverse proxy">reverse proxies</a> and gateways by including eight bytes of key data after the headers, but not advertising that data in a <code>Content-Length: 8</code> header.<sup id="cite_ref-81" class="reference"><a href="#cite_note-81"><span class="cite-bracket">&#91;</span>80<span class="cite-bracket">&#93;</span></a></sup> This data was not forwarded by all intermediates, which could lead to protocol failure. More recent drafts (e.g., hybi-09<sup id="cite_ref-82" class="reference"><a href="#cite_note-82"><span class="cite-bracket">&#91;</span>81<span class="cite-bracket">&#93;</span></a></sup>) put the key data in a <code>Sec-WebSocket-Key</code> header, solving this problem. </p> <div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=WebSocket&amp;action=edit&amp;section=15" title="Edit section: See also"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1184024115">.mw-parser-output .div-col{margin-top:0.3em;column-width:30em}.mw-parser-output .div-col-small{font-size:90%}.mw-parser-output .div-col-rules{column-rule:1px solid #aaa}.mw-parser-output .div-col dl,.mw-parser-output .div-col ol,.mw-parser-output .div-col ul{margin-top:0}.mw-parser-output .div-col li,.mw-parser-output .div-col dd{page-break-inside:avoid;break-inside:avoid-column}</style><div class="div-col" style="column-width: 22em;"> <ul><li><a href="/wiki/BOSH_(protocol)" title="BOSH (protocol)">BOSH</a></li> <li><a href="/wiki/Comparison_of_WebSocket_implementations" title="Comparison of WebSocket implementations">Comparison of WebSocket implementations</a></li> <li><a href="/wiki/Network_socket" title="Network socket">Network socket</a></li> <li><a href="/wiki/Push_technology" title="Push technology">Push technology</a></li> <li><a href="/wiki/Server-sent_events" title="Server-sent events">Server-sent events</a></li> <li><a href="/wiki/XMLHttpRequest" title="XMLHttpRequest">XMLHttpRequest</a></li> <li><a href="/wiki/HTTP/2" title="HTTP/2">HTTP/2</a></li> <li><a href="/wiki/Internet_protocol_suite" title="Internet protocol suite">Internet protocol suite</a></li> <li><a href="/wiki/WebRTC" title="WebRTC">WebRTC</a></li></ul> </div> <div class="mw-heading mw-heading2"><h2 id="Notes">Notes</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=WebSocket&amp;action=edit&amp;section=16" title="Edit section: Notes"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <style data-mw-deduplicate="TemplateStyles:r1239543626">.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}</style><div class="reflist reflist-lower-alpha"> <div class="mw-references-wrap"><ol class="references"> <li id="cite_note-mozwebsocket-66"><span class="mw-cite-backlink">^ <a href="#cite_ref-mozwebsocket_66-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-mozwebsocket_66-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text">Gecko-based browsers versions 6–10 implement the WebSocket object as "MozWebSocket",<sup id="cite_ref-65" class="reference"><a href="#cite_note-65"><span class="cite-bracket">&#91;</span>65<span class="cite-bracket">&#93;</span></a></sup> requiring extra code to integrate with existing WebSocket-enabled code.</span> </li> </ol></div></div> <div class="mw-heading mw-heading2"><h2 id="References">References</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=WebSocket&amp;action=edit&amp;section=17" title="Edit section: References"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1239543626"><div class="reflist"> <div class="mw-references-wrap mw-references-columns"><ol class="references"> <li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://websockets.spec.whatwg.org/">"WebSockets Standard"</a>. <i>websockets.spec.whatwg.org</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20230312232711/https://websockets.spec.whatwg.org/">Archived</a> from the original on 2023-03-12<span class="reference-accessdate">. Retrieved <span class="nowrap">2022-05-16</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=websockets.spec.whatwg.org&amp;rft.atitle=WebSockets+Standard&amp;rft_id=https%3A%2F%2Fwebsockets.spec.whatwg.org%2F&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.w3.org/TR/2021/NOTE-websockets-20210128/Overview.html">"The WebSocket API"</a>. <i>www.w3.org</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20220608221509/https://www.w3.org/TR/2021/NOTE-websockets-20210128/Overview.html">Archived</a> from the original on 2022-06-08<span class="reference-accessdate">. Retrieved <span class="nowrap">2022-05-16</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=www.w3.org&amp;rft.atitle=The+WebSocket+API&amp;rft_id=https%3A%2F%2Fwww.w3.org%2FTR%2F2021%2FNOTE-websockets-20210128%2FOverview.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFIan_FetteAlexey_Melnikov2011" class="citation cs1">Ian Fette; Alexey Melnikov (December 2011). <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#section-1.7">"Relationship to TCP and HTTP"</a>. <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455"><i>RFC 6455 The WebSocket Protocol</i></a>. <a href="/wiki/Internet_Engineering_Task_Force" title="Internet Engineering Task Force">IETF</a>. sec.&#160;1.7. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.atitle=Relationship+to+TCP+and+HTTP&amp;rft.btitle=&#82;FC+6455+The+WebSocket+Protocol&amp;rft.pages=sec.-1.7&amp;rft.pub=IETF&amp;rft.date=2011-12&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft.au=Ian+Fette&amp;rft.au=Alexey+Melnikov&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bsection-1.7&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-4"><span class="mw-cite-backlink"><b><a href="#cite_ref-4">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://help.adobe.com/en_US/as3/dev/WSb2ba3b1aad8a27b0-181c51321220efd9d1c-8000.html">"Adobe Flash Platform – Sockets"</a>. <i>help.adobe.com</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20210418211002/https://help.adobe.com/en_US/as3/dev/WSb2ba3b1aad8a27b0-181c51321220efd9d1c-8000.html">Archived</a> from the original on 2021-04-18<span class="reference-accessdate">. Retrieved <span class="nowrap">2021-07-28</span></span>. <q>TCP connections require a "client" and a "server". Flash Player can create client sockets.</q></cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=help.adobe.com&amp;rft.atitle=Adobe+Flash+Platform+%E2%80%93+Sockets&amp;rft_id=https%3A%2F%2Fhelp.adobe.com%2Fen_US%2Fas3%2Fdev%2FWSb2ba3b1aad8a27b0-181c51321220efd9d1c-8000.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">"The WebSocket API (WebSockets)"</a>. <i>MDN Web Docs</i>. Mozilla Developer Network. 2023-04-06. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20210728161324/https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API">Archived</a> from the original on 2021-07-28<span class="reference-accessdate">. Retrieved <span class="nowrap">2021-07-26</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=MDN+Web+Docs&amp;rft.atitle=The+WebSocket+API+%28WebSockets%29&amp;rft.date=2023-04-06&amp;rft_id=https%3A%2F%2Fdeveloper.mozilla.org%2Fen-US%2Fdocs%2FWeb%2FAPI%2FWebSockets_API&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-6">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFGraham_Klyne2011" class="citation web cs1">Graham Klyne, ed. (2011-11-14). <a rel="nofollow" class="external text" href="https://www.iana.org/assignments/uri-schemes.html">"IANA Uniform Resource Identifier (URI) Schemes"</a>. <a href="/wiki/Internet_Assigned_Numbers_Authority" title="Internet Assigned Numbers Authority">Internet Assigned Numbers Authority</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20130425164755/http://www.iana.org/assignments/uri-schemes.html">Archived</a> from the original on 2013-04-25<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-12-10</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=IANA+Uniform+Resource+Identifier+%28URI%29+Schemes&amp;rft.pub=Internet+Assigned+Numbers+Authority&amp;rft.date=2011-11-14&amp;rft_id=https%3A%2F%2Fwww.iana.org%2Fassignments%2Furi-schemes.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFIan_FetteAlexey_Melnikov2011" class="citation cs1">Ian Fette; Alexey Melnikov (December 2011). <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#section-3">"WebSocket URIs"</a>. <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455"><i>RFC 6455 The WebSocket Protocol</i></a>. <a href="/wiki/Internet_Engineering_Task_Force" title="Internet Engineering Task Force">IETF</a>. sec.&#160;3. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.atitle=WebSocket+URIs&amp;rft.btitle=&#82;FC+6455+The+WebSocket+Protocol&amp;rft.pages=sec.-3&amp;rft.pub=IETF&amp;rft.date=2011-12&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft.au=Ian+Fette&amp;rft.au=Alexey+Melnikov&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bsection-3&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-8">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.w3.org/TR/2008/WD-html5-20080610/comms.html#tcp-connections">"HTML 5"</a>. <i>www.w3.org</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160916071246/http://www.w3.org/TR/2008/WD-html5-20080610/comms.html#tcp-connections">Archived</a> from the original on 2016-09-16<span class="reference-accessdate">. Retrieved <span class="nowrap">2016-04-17</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=www.w3.org&amp;rft.atitle=HTML+5&amp;rft_id=https%3A%2F%2Fwww.w3.org%2FTR%2F2008%2FWD-html5-20080610%2Fcomms.html%23tcp-connections&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://lists.w3.org/Archives/Public/public-whatwg-archive/2008Jun/0165.html">"&#91;whatwg&#93; TCPConnection feedback from Michael Carter on 2008-06-18 (whatwg.org from June 2008)"</a>. <i>lists.w3.org</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160427004936/https://lists.w3.org/Archives/Public/public-whatwg-archive/2008Jun/0165.html">Archived</a> from the original on 2016-04-27<span class="reference-accessdate">. Retrieved <span class="nowrap">2016-04-17</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=lists.w3.org&amp;rft.atitle=%5Bwhatwg%5D+TCPConnection+feedback+from+Michael+Carter+on+2008-06-18+%28whatwg.org+from+June+2008%29&amp;rft_id=https%3A%2F%2Flists.w3.org%2FArchives%2FPublic%2Fpublic-whatwg-archive%2F2008Jun%2F0165.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-10">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://krijnhoetmer.nl/irc-logs/whatwg/20080618#l-1145">"IRC logs: freenode / #whatwg / 20080618"</a>. <i>krijnhoetmer.nl</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160821040755/http://krijnhoetmer.nl/irc-logs/whatwg/20080618#l-1145">Archived</a> from the original on 2016-08-21<span class="reference-accessdate">. Retrieved <span class="nowrap">2016-04-18</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=krijnhoetmer.nl&amp;rft.atitle=IRC+logs%3A+freenode+%2F+%23whatwg+%2F+20080618&amp;rft_id=http%3A%2F%2Fkrijnhoetmer.nl%2Firc-logs%2Fwhatwg%2F20080618%23l-1145&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-11">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://blog.chromium.org/2009/12/web-sockets-now-available-in-google.html">"Web Sockets Now Available In Google Chrome"</a>. <i>Chromium Blog</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20211209195505/https://blog.chromium.org/2009/12/web-sockets-now-available-in-google.html">Archived</a> from the original on 2021-12-09<span class="reference-accessdate">. Retrieved <span class="nowrap">2016-04-17</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=Chromium+Blog&amp;rft.atitle=Web+Sockets+Now+Available+In+Google+Chrome&amp;rft_id=https%3A%2F%2Fblog.chromium.org%2F2009%2F12%2Fweb-sockets-now-available-in-google.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREF2010" class="citation journal cs1">&lt;ian@hixie.ch&gt;, Ian Hickson (6 May 2010). <a rel="nofollow" class="external text" href="https://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-75">"The WebSocket protocol"</a>. <i>Ietf Datatracker</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20170317201023/https://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-75">Archived</a> from the original on 2017-03-17<span class="reference-accessdate">. Retrieved <span class="nowrap">2016-04-17</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=article&amp;rft.jtitle=Ietf+Datatracker&amp;rft.atitle=The+WebSocket+protocol&amp;rft.date=2010-05-06&amp;rft.aulast=%3Cian%40hixie.ch%3E&amp;rft.aufirst=Ian+Hickson&amp;rft_id=https%3A%2F%2Ftools.ietf.org%2Fhtml%2Fdraft-hixie-thewebsocketprotocol-75&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-13">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://websockets.spec.whatwg.org/#interface-definition">"Interface definition"</a>. <i>WHATWG</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20230312232711/https://websockets.spec.whatwg.org/#interface-definition">Archived</a> from the original on 2023-03-12<span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-10</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=WHATWG&amp;rft.atitle=Interface+definition&amp;rft_id=https%3A%2F%2Fwebsockets.spec.whatwg.org%2F%23interface-definition&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-14"><span class="mw-cite-backlink"><b><a href="#cite_ref-14">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://websockets.spec.whatwg.org/#dom-websocket-websocket">"new WebSocket(url, protocols)"</a>. <i>WHATWG</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20230312232711/https://websockets.spec.whatwg.org/#dom-websocket-websocket">Archived</a> from the original on 2023-03-12<span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-30</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=WHATWG&amp;rft.atitle=new+WebSocket%28url%2C+protocols%29&amp;rft_id=https%3A%2F%2Fwebsockets.spec.whatwg.org%2F%23dom-websocket-websocket&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://websockets.spec.whatwg.org/#dom-websocket-close">"close(code, reason)"</a>. <i>WHATWG</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20230312232711/https://websockets.spec.whatwg.org/#dom-websocket-close">Archived</a> from the original on 2023-03-12<span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-10</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=WHATWG&amp;rft.atitle=close%28code%2C+reason%29&amp;rft_id=https%3A%2F%2Fwebsockets.spec.whatwg.org%2F%23dom-websocket-close&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://websockets.spec.whatwg.org/#ref-for-page-66:~:text=_A%20WebSocket%20Message%20Has%20Been%20Received_">"When a WebSocket message has been received"</a>. <i>WHATWG</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20230312232711/https://websockets.spec.whatwg.org/#ref-for-page-66:~:text=_A%20WebSocket%20Message%20Has%20Been%20Received_">Archived</a> from the original on 2023-03-12<span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-13</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=WHATWG&amp;rft.atitle=When+a+WebSocket+message+has+been+received&amp;rft_id=https%3A%2F%2Fwebsockets.spec.whatwg.org%2F%23ref-for-page-66%3A~%3Atext%3D_A%2520WebSocket%2520Message%2520Has%2520Been%2520Received_&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-:1-17"><span class="mw-cite-backlink">^ <a href="#cite_ref-:1_17-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-:1_17-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://websockets.spec.whatwg.org/#closeWebSocket">"When the WebSocket connection is closed; substep 3"</a>. <i>WHATWG</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20230312232711/https://websockets.spec.whatwg.org/#closeWebSocket">Archived</a> from the original on 2023-03-12<span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-13</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=WHATWG&amp;rft.atitle=When+the+WebSocket+connection+is+closed%3B+substep+3.&amp;rft_id=https%3A%2F%2Fwebsockets.spec.whatwg.org%2F%23closeWebSocket&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-:2-18"><span class="mw-cite-backlink">^ <a href="#cite_ref-:2_18-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-:2_18-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.4"><i>The WebSocket Connection is Closed</i></a>. sec.&#160;7.1.4. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=The+WebSocket+Connection+is+Closed&amp;rft.pages=sec.-7.1.4&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bsection-7.1.4&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-19">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.5"><i>The WebSocket Connection Close Code</i></a>. sec.&#160;7.1.5. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=The+WebSocket+Connection+Close+Code&amp;rft.pages=sec.-7.1.5&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bsection-7.1.5&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.6"><i>The WebSocket Connection Close Reason</i></a>. sec.&#160;7.1.6. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=The+WebSocket+Connection+Close+Reason&amp;rft.pages=sec.-7.1.6&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bsection-7.1.6&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://websockets.spec.whatwg.org/#ref-for-dom-websocket-connecting%E2%91%A0">"CONNECTING"</a>. <i>WHATWG</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20230312232711/https://websockets.spec.whatwg.org/#ref-for-dom-websocket-connecting%E2%91%A0">Archived</a> from the original on 2023-03-12<span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-13</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=WHATWG&amp;rft.atitle=CONNECTING&amp;rft_id=https%3A%2F%2Fwebsockets.spec.whatwg.org%2F%23ref-for-dom-websocket-connecting%25E2%2591%25A0&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-22">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#section-4.1"><i>Client Requirements</i></a>. p.&#160;14.&#160;sec.&#160;4.1. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Client+Requirements&amp;rft.pages=p.-14.-sec.-4.1&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bsection-4.1&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://websockets.spec.whatwg.org/#dom-websocket-open">"OPEN"</a>. <i>WHATWG</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20230312232711/https://websockets.spec.whatwg.org/#dom-websocket-open">Archived</a> from the original on 2023-03-12<span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-10</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=WHATWG&amp;rft.atitle=OPEN&amp;rft_id=https%3A%2F%2Fwebsockets.spec.whatwg.org%2F%23dom-websocket-open&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-24">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#page-20"><i>_The WebSocket Connection is Established_</i></a>. p.&#160;20. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=_The+WebSocket+Connection+is+Established_&amp;rft.pages=p.-20&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bpage-20&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-25">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://websockets.spec.whatwg.org/#dom-websocket-closing">"CLOSING"</a>. <i>WHATWG</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20230312232711/https://websockets.spec.whatwg.org/#dom-websocket-closing">Archived</a> from the original on 2023-03-12<span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-10</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=WHATWG&amp;rft.atitle=CLOSING&amp;rft_id=https%3A%2F%2Fwebsockets.spec.whatwg.org%2F%23dom-websocket-closing&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-26"><span class="mw-cite-backlink"><b><a href="#cite_ref-26">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#section-7.1.3"><i>The WebSocket Closing Handshake is Started</i></a>. sec.&#160;7.1.3. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=The+WebSocket+Closing+Handshake+is+Started&amp;rft.pages=sec.-7.1.3&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bsection-7.1.3&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-27"><span class="mw-cite-backlink"><b><a href="#cite_ref-27">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://websockets.spec.whatwg.org/#dom-websocket-closed">"CLOSED"</a>. <i>WHATWG</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20230312232711/https://websockets.spec.whatwg.org/#dom-websocket-closed">Archived</a> from the original on 2023-03-12<span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-10</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=WHATWG&amp;rft.atitle=CLOSED&amp;rft_id=https%3A%2F%2Fwebsockets.spec.whatwg.org%2F%23dom-websocket-closed&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-28"><span class="mw-cite-backlink"><b><a href="#cite_ref-28">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#section-1.3"><i>Opening Handshake</i></a>. sec.&#160;1.3. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Opening+Handshake&amp;rft.pages=sec.-1.3&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bsection-1.3&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-29"><span class="mw-cite-backlink"><b><a href="#cite_ref-29">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#page-18"><i>Client requirement 8.</i></a> p.&#160;18. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Client+requirement+8..&amp;rft.pages=p.-18&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bpage-18&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-30"><span class="mw-cite-backlink"><b><a href="#cite_ref-30">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#page-18"><i>Client requirement 9.</i></a> p.&#160;18. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Client+requirement+9..&amp;rft.pages=p.-18&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bpage-18&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-31"><span class="mw-cite-backlink"><b><a href="#cite_ref-31">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#page-18"><i>Client requirement 7.</i></a> p.&#160;18. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Client+requirement+7..&amp;rft.pages=p.-18&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bpage-18&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-32"><span class="mw-cite-backlink"><b><a href="#cite_ref-32">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#page-24"><i>Server step 5.4.</i></a> p.&#160;24. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Server+step+5.4..&amp;rft.pages=p.-24&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bpage-24&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-33"><span class="mw-cite-backlink"><b><a href="#cite_ref-33">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#page-18"><i>Client requirement 6.</i></a> p.&#160;18. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Client+requirement+6..&amp;rft.pages=p.-18&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bpage-18&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-34"><span class="mw-cite-backlink"><b><a href="#cite_ref-34">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#page-24"><i>Server step 5.3</i></a>. p.&#160;24. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Server+step+5.3.&amp;rft.pages=p.-24&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bpage-24&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-35"><span class="mw-cite-backlink"><b><a href="#cite_ref-35">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#page-17"><i>Client requirement 5.</i></a> p.&#160;17. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Client+requirement+5..&amp;rft.pages=p.-17&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bpage-17&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-36"><span class="mw-cite-backlink"><b><a href="#cite_ref-36">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#page-24"><i>Server step 5.2</i></a>. p.&#160;24. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Server+step+5.2.&amp;rft.pages=p.-24&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bpage-24&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-37"><span class="mw-cite-backlink"><b><a href="#cite_ref-37">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#page-18"><i>Client requirement 10.</i></a> p.&#160;18. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Client+requirement+10..&amp;rft.pages=p.-18&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bpage-18&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-38"><span class="mw-cite-backlink"><b><a href="#cite_ref-38">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#section-1.2"><i>Protocol Overview</i></a>. sec.&#160;1.2. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Protocol+Overview&amp;rft.pages=sec.-1.2&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bsection-1.2&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-39"><span class="mw-cite-backlink"><b><a href="#cite_ref-39">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://trac.tools.ietf.org/wg/hybi/trac/wiki/FAQ">"Main Goal of WebSocket protocol"</a>. IETF. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160422042232/https://trac.tools.ietf.org/wg/hybi/trac/wiki/FAQ">Archived</a> from the original on 22 April 2016<span class="reference-accessdate">. Retrieved <span class="nowrap">25 July</span> 2015</span>. <q>The computation [...] is meant to prevent a caching intermediary from providing a WS-client with a cached WS-server reply without actual interaction with the WS-server.</q></cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Main+Goal+of+WebSocket+protocol&amp;rft.pub=IETF&amp;rft_id=https%3A%2F%2Ftrac.tools.ietf.org%2Fwg%2Fhybi%2Ftrac%2Fwiki%2FFAQ&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-40"><span class="mw-cite-backlink"><b><a href="#cite_ref-40">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#section-5.4"><i>Fragmentation</i></a>. sec.&#160;5.4. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Fragmentation&amp;rft.pages=sec.-5.4&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bsection-5.4&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-41"><span class="mw-cite-backlink"><b><a href="#cite_ref-41">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFJohn_A._TamplinTakeshi_Yoshino2013" class="citation cs1">John A. Tamplin; Takeshi Yoshino (2013). <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/draft-ietf-hybi-websocket-multiplexing"><i>A Multiplexing Extension for WebSockets</i></a>. <a href="/wiki/Internet_Engineering_Task_Force" title="Internet Engineering Task Force">IETF</a>. I-D draft-ietf-hybi-websocket-multiplexing.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=A+Multiplexing+Extension+for+WebSockets&amp;rft.pub=IETF&amp;rft.date=2013&amp;rft.au=John+A.+Tamplin&amp;rft.au=Takeshi+Yoshino&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Fdraft-ietf-hybi-websocket-multiplexing&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-42"><span class="mw-cite-backlink"><b><a href="#cite_ref-42">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#page-28"><i>FIN</i></a>. p.&#160;28. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=FIN&amp;rft.pages=p.-28&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bpage-28&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-43"><span class="mw-cite-backlink"><b><a href="#cite_ref-43">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#page-28"><i>RSV1, RSV2, RSV3</i></a>. p.&#160;28. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=RSV1%2C+RSV2%2C+RSV3&amp;rft.pages=p.-28&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bpage-28&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-44"><span class="mw-cite-backlink"><b><a href="#cite_ref-44">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#page-29"><i>Mask</i></a>. p.&#160;29. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Mask&amp;rft.pages=p.-29&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bpage-29&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-:0-45"><span class="mw-cite-backlink"><b><a href="#cite_ref-:0_45-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#page-29"><i>Payload length</i></a>. p.&#160;29. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Payload+length&amp;rft.pages=p.-29&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bpage-29&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-46"><span class="mw-cite-backlink"><b><a href="#cite_ref-46">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#section-5.1"><i>Overview</i></a>. sec.&#160;5.1. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Overview&amp;rft.pages=sec.-5.1&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bsection-5.1&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-47"><span class="mw-cite-backlink"><b><a href="#cite_ref-47">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#section-5.3"><i>Client-to-Server Masking</i></a>. sec.&#160;5.3. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Client-to-Server+Masking&amp;rft.pages=sec.-5.3&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bsection-5.3&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-48"><span class="mw-cite-backlink"><b><a href="#cite_ref-48">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#section-1.4"><i>Closing Handshake</i></a>. sec.&#160;1.4. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Closing+Handshake&amp;rft.pages=sec.-1.4&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bsection-1.4&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-49"><span class="mw-cite-backlink"><b><a href="#cite_ref-49">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#section-5.5.1"><i>Close</i></a>. sec.&#160;5.5.1. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Close&amp;rft.pages=sec.-5.5.1&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bsection-5.5.1&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-50"><span class="mw-cite-backlink"><b><a href="#cite_ref-50">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#section-5.5.2"><i>Ping</i></a>. sec.&#160;5.5.2. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Ping&amp;rft.pages=sec.-5.5.2&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bsection-5.5.2&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-51"><span class="mw-cite-backlink"><b><a href="#cite_ref-51">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#section-5.5.3"><i>Pong</i></a>. sec.&#160;5.5.3. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Pong&amp;rft.pages=sec.-5.5.3&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bsection-5.5.3&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-52"><span class="mw-cite-backlink"><b><a href="#cite_ref-52">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#section-7.4.2"><i>Reserved Status Code Ranges</i></a>. sec.&#160;7.4.2. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Reserved+Status+Code+Ranges&amp;rft.pages=sec.-7.4.2&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bsection-7.4.2&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-53"><span class="mw-cite-backlink"><b><a href="#cite_ref-53">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation cs1"><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455#section-7.4.1"><i>Defined Status Codes</i></a>. sec.&#160;7.4.1. <a href="/wiki/Doi_(identifier)" class="mw-redirect" title="Doi (identifier)">doi</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://doi.org/10.17487%2FRFC6455">10.17487/RFC6455</a></span>. <a href="/wiki/Request_for_Comments" title="Request for Comments">RFC</a> <a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=book&amp;rft.btitle=Defined+Status+Codes&amp;rft.pages=sec.-7.4.1&amp;rft_id=info%3Adoi%2F10.17487%2F&#82;FC6455&amp;rft_id=https%3A%2F%2Fdatatracker.ietf.org%2Fdoc%2Fhtml%2Frfc6455%26%23035%3Bsection-7.4.1&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-54"><span class="mw-cite-backlink"><b><a href="#cite_ref-54">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFDirkjan_Ochtman2011" class="citation web cs1">Dirkjan Ochtman (May 27, 2011). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20120526230019/https://developer.mozilla.org/en/WebSockets">"WebSocket enabled in Firefox 6"</a>. <i>Mozilla.org</i>. Archived from <a rel="nofollow" class="external text" href="https://developer.mozilla.org/en/WebSockets">the original</a> on 2012-05-26<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-06-30</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=Mozilla.org&amp;rft.atitle=WebSocket+enabled+in+Firefox+6&amp;rft.date=2011-05-27&amp;rft.au=Dirkjan+Ochtman&amp;rft_id=https%3A%2F%2Fdeveloper.mozilla.org%2Fen%2FWebSockets&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-55"><span class="mw-cite-backlink"><b><a href="#cite_ref-55">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.chromium.org/developers/web-platform-status">"Chromium Web Platform Status"</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20170304203008/http://www.chromium.org/developers/web-platform-status">Archived</a> from the original on 2017-03-04<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-08-03</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Chromium+Web+Platform+Status&amp;rft_id=https%3A%2F%2Fwww.chromium.org%2Fdevelopers%2Fweb-platform-status&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-56"><span class="mw-cite-backlink"><b><a href="#cite_ref-56">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://msdn.microsoft.com/en-us/library/ie/hh673567(v=vs.85).aspx">"WebSockets (Windows)"</a>. Microsoft. 2012-09-28. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20150325091443/https://msdn.microsoft.com/en-us/library/ie/hh673567(v=vs.85).aspx">Archived</a> from the original on 2015-03-25<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-11-07</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=WebSockets+%28Windows%29&amp;rft.pub=Microsoft&amp;rft.date=2012-09-28&amp;rft_id=https%3A%2F%2Fmsdn.microsoft.com%2Fen-us%2Flibrary%2Fie%2Fhh673567%28v%3Dvs.85%29.aspx&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-autobahn-57"><span class="mw-cite-backlink"><b><a href="#cite_ref-autobahn_57-0">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20160922040928/http://autobahn.ws/testsuite/reports/clients/index.html">"WebSockets Protocol Test Report"</a>. Tavendo.de. 2011-10-27. Archived from <a rel="nofollow" class="external text" href="http://autobahn.ws/testsuite/reports/clients/index.html">the original</a> on 2016-09-22<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-12-10</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=WebSockets+Protocol+Test+Report&amp;rft.pub=Tavendo.de&amp;rft.date=2011-10-27&amp;rft_id=http%3A%2F%2Fautobahn.ws%2Ftestsuite%2Freports%2Fclients%2Findex.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-58"><span class="mw-cite-backlink"><b><a href="#cite_ref-58">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFKatie_Marsal2010" class="citation web cs1">Katie Marsal (November 23, 2010). <a rel="nofollow" class="external text" href="https://www.appleinsider.com/articles/10/11/23/apple_adds_accelerometer_websockets_support_to_safari_in_ios_4_2.html">"Apple adds accelerometer, WebSockets support to Safari in iOS 4.2"</a>. <i>AppleInsider.com</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20110301114256/http://www.appleinsider.com/articles/10/11/23/apple_adds_accelerometer_websockets_support_to_safari_in_ios_4_2.html">Archived</a> from the original on 2011-03-01<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-05-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=AppleInsider.com&amp;rft.atitle=Apple+adds+accelerometer%2C+WebSockets+support+to+Safari+in+iOS+4.2&amp;rft.date=2010-11-23&amp;rft.au=Katie+Marsal&amp;rft_id=https%3A%2F%2Fwww.appleinsider.com%2Farticles%2F10%2F11%2F23%2Fapple_adds_accelerometer_websockets_support_to_safari_in_ios_4_2.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-59"><span class="mw-cite-backlink"><b><a href="#cite_ref-59">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20110610191150/http://docs.blackberry.com/en/developers/deliverables/29271/Web_Sockets_support_1582781_11.jsp">"Web Sockets API"</a>. <a href="/wiki/BlackBerry_Limited" title="BlackBerry Limited">BlackBerry</a>. Archived from <a rel="nofollow" class="external text" href="http://docs.blackberry.com/en/developers/deliverables/29271/Web_Sockets_support_1582781_11.jsp">the original</a> on June 10, 2011<span class="reference-accessdate">. Retrieved <span class="nowrap">8 July</span> 2011</span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Web+Sockets+API&amp;rft.pub=BlackBerry&amp;rft_id=http%3A%2F%2Fdocs.blackberry.com%2Fen%2Fdevelopers%2Fdeliverables%2F29271%2FWeb_Sockets_support_1582781_11.jsp&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-60"><span class="mw-cite-backlink"><b><a href="#cite_ref-60">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFChris_Heilmann2010" class="citation web cs1">Chris Heilmann (December 8, 2010). <a rel="nofollow" class="external text" href="https://hacks.mozilla.org/2010/12/websockets-disabled-in-firefox-4/">"WebSocket disabled in Firefox 4"</a>. <i>Hacks.Mozilla.org</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20170306114251/https://hacks.mozilla.org/2010/12/websockets-disabled-in-firefox-4/">Archived</a> from the original on 2017-03-06<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-05-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=Hacks.Mozilla.org&amp;rft.atitle=WebSocket+disabled+in+Firefox+4&amp;rft.date=2010-12-08&amp;rft.au=Chris+Heilmann&amp;rft_id=https%3A%2F%2Fhacks.mozilla.org%2F2010%2F12%2Fwebsockets-disabled-in-firefox-4%2F&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-61"><span class="mw-cite-backlink"><b><a href="#cite_ref-61">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFAleksander_Aas2010" class="citation web cs1">Aleksander Aas (December 10, 2010). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20101215010748/http://my.opera.com/chooseopera/blog/2010/12/10/regarding-websocket">"Regarding WebSocket"</a>. <i>My Opera Blog</i>. Archived from <a rel="nofollow" class="external text" href="http://my.opera.com/chooseopera/blog/2010/12/10/regarding-websocket">the original</a> on 2010-12-15<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-05-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=My+Opera+Blog&amp;rft.atitle=Regarding+WebSocket&amp;rft.date=2010-12-10&amp;rft.au=Aleksander+Aas&amp;rft_id=http%3A%2F%2Fmy.opera.com%2Fchooseopera%2Fblog%2F2010%2F12%2F10%2Fregarding-websocket&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-62"><span class="mw-cite-backlink"><b><a href="#cite_ref-62">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFWangSalimMoskovits2013" class="citation book cs1">Wang, Vanessa; Salim, Frank; Moskovits, Peter (February 2013). <a rel="nofollow" class="external text" href="https://web.archive.org/web/20151231184436/http://my.safaribooksonline.com/book/-/9781430247401/appendix-a-inspecting-websocket-traffic/sec1_xhtml">"APPENDIX A: WebSocket Frame Inspection with Google Chrome Developer Tools"</a>. <i>The Definitive Guide to HTML5 WebSocket</i>. Apress. <a href="/wiki/ISBN_(identifier)" class="mw-redirect" title="ISBN (identifier)">ISBN</a>&#160;<a href="/wiki/Special:BookSources/978-1-4302-4740-1" title="Special:BookSources/978-1-4302-4740-1"><bdi>978-1-4302-4740-1</bdi></a>. Archived from <a rel="nofollow" class="external text" href="http://my.safaribooksonline.com/book/-/9781430247401/appendix-a-inspecting-websocket-traffic/sec1_xhtml">the original</a> on 31 December 2015<span class="reference-accessdate">. Retrieved <span class="nowrap">7 April</span> 2013</span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.atitle=APPENDIX+A%3A+WebSocket+Frame+Inspection+with+Google+Chrome+Developer+Tools&amp;rft.btitle=The+Definitive+Guide+to+HTML5+WebSocket&amp;rft.pub=Apress&amp;rft.date=2013-02&amp;rft.isbn=978-1-4302-4740-1&amp;rft.aulast=Wang&amp;rft.aufirst=Vanessa&amp;rft.au=Salim%2C+Frank&amp;rft.au=Moskovits%2C+Peter&amp;rft_id=http%3A%2F%2Fmy.safaribooksonline.com%2Fbook%2F-%2F9781430247401%2Fappendix-a-inspecting-websocket-traffic%2Fsec1_xhtml&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-63"><span class="mw-cite-backlink"><b><a href="#cite_ref-63">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20120526230019/https://developer.mozilla.org/en/WebSockets">"WebSockets (support in Firefox)"</a>. <i>developer.mozilla.org</i>. Mozilla Foundation. 2011-09-30. Archived from <a rel="nofollow" class="external text" href="https://developer.mozilla.org/en/WebSockets">the original</a> on 2012-05-26<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-12-10</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=developer.mozilla.org&amp;rft.atitle=WebSockets+%28support+in+Firefox%29&amp;rft.date=2011-09-30&amp;rft_id=https%3A%2F%2Fdeveloper.mozilla.org%2Fen%2FWebSockets&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-64"><span class="mw-cite-backlink"><b><a href="#cite_ref-64">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://bugzilla.mozilla.org/show_bug.cgi?id=640003">"Bug 640003 - WebSockets - upgrade to ietf-06"</a>. Mozilla Foundation. 2011-03-08. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20210401044535/https://bugzilla.mozilla.org/show_bug.cgi?id=640003">Archived</a> from the original on 2021-04-01<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-12-10</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Bug+640003+-+WebSockets+-+upgrade+to+ietf-06&amp;rft.pub=Mozilla+Foundation&amp;rft.date=2011-03-08&amp;rft_id=https%3A%2F%2Fbugzilla.mozilla.org%2Fshow_bug.cgi%3Fid%3D640003&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-65"><span class="mw-cite-backlink"><b><a href="#cite_ref-65">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20120526230019/https://developer.mozilla.org/en/WebSockets">"WebSockets - MDN"</a>. <i>developer.mozilla.org</i>. Mozilla Foundation. 2011-09-30. Archived from <a rel="nofollow" class="external text" href="https://developer.mozilla.org/en/WebSockets">the original</a> on 2012-05-26<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-12-10</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=developer.mozilla.org&amp;rft.atitle=WebSockets+-+MDN&amp;rft.date=2011-09-30&amp;rft_id=https%3A%2F%2Fdeveloper.mozilla.org%2Fen%2FWebSockets&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-67"><span class="mw-cite-backlink"><b><a href="#cite_ref-67">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://bugzilla.mozilla.org/show_bug.cgi?id=640003#c91">"Bug 640003 - WebSockets - upgrade to ietf-07(comment 91)"</a>. Mozilla Foundation. 2011-07-22. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20210401044535/https://bugzilla.mozilla.org/show_bug.cgi?id=640003#c91">Archived</a> from the original on 2021-04-01<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-07-28</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Bug+640003+-+WebSockets+-+upgrade+to+ietf-07%28comment+91%29&amp;rft.pub=Mozilla+Foundation&amp;rft.date=2011-07-22&amp;rft_id=https%3A%2F%2Fbugzilla.mozilla.org%2Fshow_bug.cgi%3Fid%3D640003%23c91&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-68"><span class="mw-cite-backlink"><b><a href="#cite_ref-68">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://code.google.com/p/chromium/issues/detail?id=64470">"Chromium bug 64470"</a>. <i>code.google.com</i>. 2010-11-25. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20151231184436/https://code.google.com/p/chromium/issues/detail?id=64470">Archived</a> from the original on 2015-12-31<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-12-10</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=code.google.com&amp;rft.atitle=Chromium+bug+64470&amp;rft.date=2010-11-25&amp;rft_id=https%3A%2F%2Fcode.google.com%2Fp%2Fchromium%2Fissues%2Fdetail%3Fid%3D64470&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-69"><span class="mw-cite-backlink"><b><a href="#cite_ref-69">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://blogs.msdn.com/b/ie/archive/2012/03/19/websockets-in-windows-consumer-preview.aspx">"WebSockets in Windows Consumer Preview"</a>. <i>IE Engineering Team</i>. Microsoft. 2012-03-19. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20150906135037/http://blogs.msdn.com/b/ie/archive/2012/03/19/websockets-in-windows-consumer-preview.aspx">Archived</a> from the original on 2015-09-06<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-07-23</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=IE+Engineering+Team&amp;rft.atitle=WebSockets+in+Windows+Consumer+Preview&amp;rft.date=2012-03-19&amp;rft_id=https%3A%2F%2Fblogs.msdn.com%2Fb%2Fie%2Farchive%2F2012%2F03%2F19%2Fwebsockets-in-windows-consumer-preview.aspx&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-70"><span class="mw-cite-backlink"><b><a href="#cite_ref-70">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://trac.webkit.org/changeset/97249">"WebKit Changeset 97247: WebSocket: Update WebSocket protocol to hybi-17"</a>. <i>trac.webkit.org</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20120105121750/http://trac.webkit.org/changeset/97249">Archived</a> from the original on 2012-01-05<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-12-10</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=trac.webkit.org&amp;rft.atitle=WebKit+Changeset+97247%3A+WebSocket%3A+Update+WebSocket+protocol+to+hybi-17&amp;rft_id=https%3A%2F%2Ftrac.webkit.org%2Fchangeset%2F97249&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-71"><span class="mw-cite-backlink"><b><a href="#cite_ref-71">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://web.archive.org/web/20120805234006/http://my.opera.com/ODIN/blog/2012/08/03/a-hot-opera-12-50-summer-time-snapshot">"A hot Opera 12.50 summer-time snapshot"</a>. Opera Developer News. 2012-08-03. Archived from <a rel="nofollow" class="external text" href="http://my.opera.com/ODIN/blog/2012/08/03/a-hot-opera-12-50-summer-time-snapshot">the original</a> on 2012-08-05<span class="reference-accessdate">. Retrieved <span class="nowrap">2012-08-03</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=A+hot+Opera+12.50+summer-time+snapshot&amp;rft.pub=Opera+Developer+News&amp;rft.date=2012-08-03&amp;rft_id=http%3A%2F%2Fmy.opera.com%2FODIN%2Fblog%2F2012%2F08%2F03%2Fa-hot-opera-12-50-summer-time-snapshot&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-72"><span class="mw-cite-backlink"><b><a href="#cite_ref-72">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://archive.today/20120717014311/http://nginx.org/en/CHANGES">"Welcome to nginx!"</a>. <i>nginx.org</i>. Archived from <a rel="nofollow" class="external text" href="http://nginx.org/en/CHANGES">the original</a> on 17 July 2012<span class="reference-accessdate">. Retrieved <span class="nowrap">3 February</span> 2022</span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=nginx.org&amp;rft.atitle=Welcome+to+nginx%21&amp;rft_id=http%3A%2F%2Fnginx.org%2Fen%2FCHANGES&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-73"><span class="mw-cite-backlink"><b><a href="#cite_ref-73">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.nginx.com/blog/websocket-nginx/">"Using NGINX as a WebSocket Proxy"</a>. <i>NGINX</i>. May 17, 2014. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20191006062348/https://www.nginx.com/blog/websocket-nginx/">Archived</a> from the original on October 6, 2019<span class="reference-accessdate">. Retrieved <span class="nowrap">November 3,</span> 2019</span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=NGINX&amp;rft.atitle=Using+NGINX+as+a+WebSocket+Proxy&amp;rft.date=2014-05-17&amp;rft_id=https%3A%2F%2Fwww.nginx.com%2Fblog%2Fwebsocket-nginx%2F&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-74"><span class="mw-cite-backlink"><b><a href="#cite_ref-74">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://httpd.apache.org/docs/trunk/new_features_2_4.html">"Overview of new features in Apache HTTP Server 2.4"</a>. <i>Apache</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20201111201741/http://httpd.apache.org/docs/trunk/new_features_2_4.html">Archived</a> from the original on 2020-11-11<span class="reference-accessdate">. Retrieved <span class="nowrap">2021-01-26</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=Apache&amp;rft.atitle=Overview+of+new+features+in+Apache+HTTP+Server+2.4&amp;rft_id=http%3A%2F%2Fhttpd.apache.org%2Fdocs%2Ftrunk%2Fnew_features_2_4.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-75"><span class="mw-cite-backlink"><b><a href="#cite_ref-75">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://www.apachelounge.com/Changelog-2.4.html">"Changelog Apache 2.4"</a>. <i>Apache Lounge</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20210122162741/https://www.apachelounge.com/Changelog-2.4.html">Archived</a> from the original on 2021-01-22<span class="reference-accessdate">. Retrieved <span class="nowrap">2021-01-26</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=Apache+Lounge&amp;rft.atitle=Changelog+Apache+2.4&amp;rft_id=https%3A%2F%2Fwww.apachelounge.com%2FChangelog-2.4.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-76"><span class="mw-cite-backlink"><b><a href="#cite_ref-76">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-8/iis-80-websocket-protocol-support">"IIS 8.0 WebSocket Protocol Support"</a>. <i>Microsoft Docs</i>. 28 November 2012. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20200218153735/https://docs.microsoft.com/en-us/iis/get-started/whats-new-in-iis-8/iis-80-websocket-protocol-support">Archived</a> from the original on 2020-02-18<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-02-18</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=Microsoft+Docs&amp;rft.atitle=IIS+8.0+WebSocket+Protocol+Support&amp;rft.date=2012-11-28&amp;rft_id=https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fiis%2Fget-started%2Fwhats-new-in-iis-8%2Fiis-80-websocket-protocol-support&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-77"><span class="mw-cite-backlink"><b><a href="#cite_ref-77">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://redmine.lighttpd.net/projects/lighttpd/wiki/Release-1_4_46">"Release-1 4 46 - Lighttpd - lighty labs"</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20210116155634/https://redmine.lighttpd.net/projects/lighttpd/wiki/Release-1_4_46">Archived</a> from the original on 2021-01-16<span class="reference-accessdate">. Retrieved <span class="nowrap">2020-12-29</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Release-1+4+46+-+Lighttpd+-+lighty+labs&amp;rft_id=https%3A%2F%2Fredmine.lighttpd.net%2Fprojects%2Flighttpd%2Fwiki%2FRelease-1_4_46&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-78"><span class="mw-cite-backlink"><b><a href="#cite_ref-78">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://redmine.lighttpd.net/projects/lighttpd/wiki/Release-1_4_65">"Release-1 4 65 - Lighttpd - lighty labs"</a>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20240503061036/https://redmine.lighttpd.net/projects/lighttpd/wiki/Release-1_4_65">Archived</a> from the original on 2024-05-03<span class="reference-accessdate">. Retrieved <span class="nowrap">2024-05-03</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=unknown&amp;rft.btitle=Release-1+4+65+-+Lighttpd+-+lighty+labs&amp;rft_id=https%3A%2F%2Fredmine.lighttpd.net%2Fprojects%2Flighttpd%2Fwiki%2FRelease-1_4_65&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-79"><span class="mw-cite-backlink"><b><a href="#cite_ref-79">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFChristian_Schneider2013" class="citation web cs1">Christian Schneider (August 31, 2013). <a rel="nofollow" class="external text" href="https://www.christian-schneider.net/CrossSiteWebSocketHijacking.html#main">"Cross-Site WebSocket Hijacking (CSWSH)"</a>. <i>Web Application Security Blog</i>. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20161231061757/http://www.christian-schneider.net/CrossSiteWebSocketHijacking.html#main">Archived</a> from the original on December 31, 2016<span class="reference-accessdate">. Retrieved <span class="nowrap">December 30,</span> 2015</span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=Web+Application+Security+Blog&amp;rft.atitle=Cross-Site+WebSocket+Hijacking+%28CSWSH%29&amp;rft.date=2013-08-31&amp;rft.au=Christian+Schneider&amp;rft_id=https%3A%2F%2Fwww.christian-schneider.net%2FCrossSiteWebSocketHijacking.html%23main&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-80"><span class="mw-cite-backlink"><b><a href="#cite_ref-80">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFPeter_Lubbers2010" class="citation web cs1">Peter Lubbers (March 16, 2010). <a rel="nofollow" class="external text" href="http://www.infoq.com/articles/Web-Sockets-Proxy-Servers">"How HTML5 Web Sockets Interact With Proxy Servers"</a>. <i>Infoq.com</i>. C4Media Inc. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160508202722/http://www.infoq.com/articles/Web-Sockets-Proxy-Servers">Archived</a> from the original on 2016-05-08<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-12-10</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=Infoq.com&amp;rft.atitle=How+HTML5+Web+Sockets+Interact+With+Proxy+Servers&amp;rft.date=2010-03-16&amp;rft.au=Peter+Lubbers&amp;rft_id=http%3A%2F%2Fwww.infoq.com%2Farticles%2FWeb-Sockets-Proxy-Servers&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-81"><span class="mw-cite-backlink"><b><a href="#cite_ref-81">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFWilly_Tarreau2010" class="citation web cs1">Willy Tarreau (2010-07-06). <a rel="nofollow" class="external text" href="https://www.ietf.org/mail-archive/web/hybi/current/msg02149.html">"WebSocket -76 is incompatible with HTTP reverse proxies"</a>. <i>ietf.org</i> (email). Internet Engineering Task Force. <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160917063052/http://www.ietf.org/mail-archive/web/hybi/current/msg02149.html">Archived</a> from the original on 2016-09-17<span class="reference-accessdate">. Retrieved <span class="nowrap">2011-12-10</span></span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&amp;rft.genre=unknown&amp;rft.jtitle=ietf.org&amp;rft.atitle=WebSocket+-76+is+incompatible+with+HTTP+reverse+proxies&amp;rft.date=2010-07-06&amp;rft.au=Willy+Tarreau&amp;rft_id=https%3A%2F%2Fwww.ietf.org%2Fmail-archive%2Fweb%2Fhybi%2Fcurrent%2Fmsg02149.html&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span></span> </li> <li id="cite_note-82"><span class="mw-cite-backlink"><b><a href="#cite_ref-82">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFIan_Fette2011" class="citation cs1">Ian Fette (June 13, 2011). <a rel="nofollow" class="external text" href="https://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-09#section-11.4#section-11.4">"Sec-WebSocket-Key"</a>. <a rel="nofollow" class="external text" href="https://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-09#section-11.4"><i>The WebSocket protocol, draft hybi-09</i></a>. sec.&#160;11.4<span class="reference-accessdate">. Retrieved <span class="nowrap">June 15,</span> 2011</span>.</cite><span title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&amp;rft.genre=bookitem&amp;rft.atitle=Sec-WebSocket-Key&amp;rft.btitle=The+WebSocket+protocol%2C+draft+hybi-09&amp;rft.pages=sec.-11.4&amp;rft.date=2011-06-13&amp;rft.au=Ian+Fette&amp;rft_id=https%3A%2F%2Ftools.ietf.org%2Fhtml%2Fdraft-ietf-hybi-thewebsocketprotocol-09%23section-11.4%26%23035%3Bsection-11.4&amp;rfr_id=info%3Asid%2Fen.wikipedia.org%3AWebSocket" class="Z3988"></span> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20160201000218/http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol-09#section-11.4">Archived</a> February 1, 2016, at the <a href="/wiki/Wayback_Machine" title="Wayback Machine">Wayback Machine</a></span> </li> </ol></div></div> <div class="mw-heading mw-heading2"><h2 id="External_links">External links</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=WebSocket&amp;action=edit&amp;section=18" title="Edit section: External links"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a rel="nofollow" class="external text" href="https://datatracker.ietf.org/wg/hybi/charter/">IETF Hypertext-Bidirectional (HyBi) working group</a> <ul><li><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><a href="/wiki/RFC_(identifier)" class="mw-redirect" title="RFC (identifier)">RFC</a>&#160;<a rel="nofollow" class="external text" href="https://datatracker.ietf.org/doc/html/rfc6455">6455</a> The WebSocket protocol – Proposed Standard published by the IETF HyBi Working Group</li> <li><a rel="nofollow" class="external text" href="https://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol">The WebSocket protocol</a> – Internet-Draft published by the IETF HyBi Working Group</li> <li><a rel="nofollow" class="external text" href="https://tools.ietf.org/html/draft-hixie-thewebsocketprotocol-76">The WebSocket protocol</a> – Original protocol proposal by Ian Hickson</li></ul></li> <li><a rel="nofollow" class="external text" href="https://dev.w3.org/html5/websockets/">The WebSocket API</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20150607035919/http://dev.w3.org/html5/websockets/">Archived</a> 2015-06-07 at the <a href="/wiki/Wayback_Machine" title="Wayback Machine">Wayback Machine</a> – W3C <a href="/wiki/W3C_recommendation#Working_draft_(WD)" class="mw-redirect" title="W3C recommendation">Working Draft</a> specification of the API</li> <li><a rel="nofollow" class="external text" href="http://www.w3.org/TR/websockets/">The WebSocket API</a> – W3C <a href="/wiki/W3C_recommendation#Candidate_recommendation_(CR)" class="mw-redirect" title="W3C recommendation">Candidate Recommendation</a> specification of the API</li> <li><a rel="nofollow" class="external text" href="https://www.websocket.org/">WebSocket.org</a> <a rel="nofollow" class="external text" href="https://web.archive.org/web/20180916101105/http://websocket.org/">Archived</a> 2018-09-16 at the <a href="/wiki/Wayback_Machine" title="Wayback Machine">Wayback Machine</a> WebSocket demos, loopback tests, general information and community</li></ul> <div class="navbox-styles"><style data-mw-deduplicate="TemplateStyles:r1129693374">.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}</style><style data-mw-deduplicate="TemplateStyles:r1236075235">.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}</style></div><div role="navigation" class="navbox" aria-labelledby="Web_browsers" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><style data-mw-deduplicate="TemplateStyles:r1239400231">.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}</style><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/wiki/Template:Web_browsers" title="Template:Web browsers"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:Web_browsers" title="Template talk:Web browsers"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:Web_browsers" title="Special:EditPage/Template:Web browsers"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="Web_browsers" style="font-size:114%;margin:0 4em"><a href="/wiki/Web_browser" title="Web browser">Web browsers</a></div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks mw-collapsible uncollapsed navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="*_Features_*_standards_*_protocols" style="font-size:114%;margin:0 4em"> <ul><li>Features</li> <li>standards</li> <li>protocols</li></ul> </div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%">Features</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Bookmark_(digital)" title="Bookmark (digital)">Bookmarks</a></li> <li><a href="/wiki/Browser_extension" title="Browser extension">Extensions</a></li> <li><a href="/wiki/Private_browsing" title="Private browsing">Privacy mode</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Web_standards" title="Web standards">Web standards</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/HTML" title="HTML">HTML</a> <ul><li><a href="/wiki/HTML5" title="HTML5">v5</a></li></ul></li> <li><a href="/wiki/CSS" title="CSS">CSS</a></li> <li><a href="/wiki/Document_Object_Model" title="Document Object Model">DOM</a></li> <li><a href="/wiki/JavaScript" title="JavaScript">JavaScript</a> <ul><li><a href="/wiki/WebAssembly" title="WebAssembly">WebAssembly</a></li> <li><a href="/wiki/Web_storage" title="Web storage">Web storage</a></li> <li><a href="/wiki/Indexed_Database_API" title="Indexed Database API">IndexedDB</a></li> <li><a href="/wiki/WebGL" title="WebGL">WebGL</a></li> <li><a href="/wiki/WebGPU" title="WebGPU">WebGPU</a></li></ul></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Protocols</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/HTTP" title="HTTP">HTTP</a> <ul><li><a href="/wiki/HTTPS" title="HTTPS">Encryption</a></li> <li><a href="/wiki/HTTP_cookie" title="HTTP cookie">Cookies</a> <ul><li><a href="/wiki/Third-party_cookies" title="Third-party cookies">third-party</a></li></ul></li></ul></li> <li><a href="/wiki/Online_Certificate_Status_Protocol" title="Online Certificate Status Protocol">OCSP</a></li> <li><a href="/wiki/WebRTC" title="WebRTC">WebRTC</a></li> <li><a class="mw-selflink selflink">WebSocket</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr></tbody></table><div></div></td></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks mw-collapsible mw-collapsed navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Active" style="font-size:114%;margin:0 4em">Active</div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Blink_(browser_engine)" title="Blink (browser engine)">Blink</a>-based</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Proprietary_software" title="Proprietary software">Proprietary</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Google_Chrome" title="Google Chrome">Google Chrome</a></li> <li><a href="/wiki/Arc_(web_browser)" title="Arc (web browser)">Arc</a></li> <li><a href="/wiki/Avast_Secure_Browser" title="Avast Secure Browser">Avast</a></li> <li><a href="/wiki/C%E1%BB%91c_C%E1%BB%91c" title="Cốc Cốc">Coc Coc</a></li> <li><a href="/wiki/Comodo_Dragon" title="Comodo Dragon">Comodo</a></li> <li><a href="/wiki/Epic_(web_browser)" title="Epic (web browser)">Epic</a></li> <li><a href="/wiki/Maxthon" title="Maxthon">Maxthon</a></li> <li><a href="/wiki/Microsoft_Edge" title="Microsoft Edge">Microsoft Edge</a></li> <li><a href="/wiki/Opera_(web_browser)" title="Opera (web browser)">Opera</a> (<a href="/wiki/Opera_Mobile" title="Opera Mobile">Mobile</a>)</li> <li><a href="/wiki/Puffin_Browser" title="Puffin Browser">Puffin </a></li> <li><a href="/wiki/QQ_Browser" title="QQ Browser">QQ</a></li> <li><a href="/wiki/Samsung_Internet" title="Samsung Internet">Samsung</a></li> <li><a href="/wiki/Amazon_Silk" title="Amazon Silk">Silk</a></li> <li><a href="/wiki/Sleipnir_(web_browser)" title="Sleipnir (web browser)">Sleipnir</a></li> <li><a href="/wiki/SRWare_Iron" title="SRWare Iron">SRWare</a></li> <li><a href="/wiki/UC_Browser" title="UC Browser">UC</a></li> <li><a href="/wiki/Vivaldi_(web_browser)" title="Vivaldi (web browser)">Vivaldi</a></li> <li><a href="/wiki/Naver_Whale" title="Naver Whale">Whale</a></li> <li><a href="/wiki/Yandex_Browser" title="Yandex Browser">Yandex</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Free_and_Open_Source" class="mw-redirect" title="Free and Open Source">FOSS</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Chromium_(web_browser)" title="Chromium (web browser)">Chromium</a></li> <li><a href="/wiki/Brave_(web_browser)" title="Brave (web browser)">Brave</a></li> <li><a href="/wiki/Dooble" title="Dooble">Dooble</a></li> <li><a href="/wiki/Falkon" title="Falkon">Falkon</a></li> <li><a href="/wiki/Otter_Browser" title="Otter Browser">Otter</a></li> <li><a href="/wiki/Supermium" title="Supermium">Supermium</a></li> <li><a href="/wiki/Ungoogled-chromium" title="Ungoogled-chromium">ungoogled</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Gecko_(software)" title="Gecko (software)">Gecko</a>-based</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Firefox" title="Firefox">Firefox</a></li> <li><a href="/wiki/Floorp" title="Floorp">Floorp</a></li> <li><a href="/wiki/GNU_IceCat" title="GNU IceCat">GNU IceCat</a></li> <li><a href="/wiki/LibreWolf" title="LibreWolf">LibreWolf</a></li> <li><a href="/wiki/Midori_(web_browser)" title="Midori (web browser)">Midori</a></li> <li><a href="/wiki/SlimBrowser" title="SlimBrowser">SlimBrowser</a></li> <li><a href="/wiki/Tor_Browser" class="mw-redirect" title="Tor Browser">Tor Browser</a></li> <li>Gecko <a href="/wiki/Fork_(software_development)" title="Fork (software development)">forks</a> <ul><li><a href="/wiki/Basilisk_(web_browser)" title="Basilisk (web browser)">Basilisk</a></li> <li><a href="/wiki/K-Meleon" title="K-Meleon">K-Meleon</a></li> <li><a href="/wiki/Pale_Moon" title="Pale Moon">Pale Moon</a></li> <li><a href="/wiki/SeaMonkey" title="SeaMonkey">SeaMonkey</a></li> <li><a href="/wiki/Waterfox" title="Waterfox">Waterfox</a></li></ul></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/WebKit" title="WebKit">WebKit</a>-based</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Safari_(web_browser)" title="Safari (web browser)">Safari</a></li> <li><a href="/wiki/GNOME_Web" title="GNOME Web">GNOME Web</a></li> <li><a href="/wiki/ICab" title="ICab">iCab</a></li> <li><a href="/wiki/Kagi_(search_engine)#Orion_Browser" title="Kagi (search engine)">Orion</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Multi-<a href="/wiki/Browser_engine" title="Browser engine">engine</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/360_Secure_Browser" title="360 Secure Browser">360</a></li> <li><a href="/wiki/DuckDuckGo_Private_Browser" title="DuckDuckGo Private Browser">DuckDuckGo</a></li> <li><a href="/wiki/Konqueror" title="Konqueror">Konqueror</a></li> <li><a href="/wiki/Lunascape" title="Lunascape">Lunascape</a></li> <li><a href="/wiki/NetFront" title="NetFront">NetFront</a></li> <li><a href="/wiki/Qutebrowser" title="Qutebrowser">qutebrowser</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Other</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Eww_(web_browser)" title="Eww (web browser)">eww</a></li> <li><a href="/wiki/Flow_(web_browser)" title="Flow (web browser)">Flow</a></li> <li><a href="/wiki/Ladybird_(web_browser)" title="Ladybird (web browser)">Ladybird</a></li> <li><a href="/wiki/Links_(web_browser)" title="Links (web browser)">Links</a></li> <li><a href="/wiki/Lynx_(web_browser)" title="Lynx (web browser)">Lynx</a></li> <li><a href="/wiki/NetSurf" title="NetSurf">NetSurf</a></li> <li><a href="/wiki/Opera_Mini" title="Opera Mini">Opera Mini</a></li> <li><a href="/wiki/W3m" title="W3m">w3m</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr></tbody></table><div></div></td></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks mw-collapsible mw-collapsed navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><div id="Discontinued" style="font-size:114%;margin:0 4em">Discontinued</div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Blink_(browser_engine)" title="Blink (browser engine)">Blink</a>-based</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Beaker_(web_browser)" title="Beaker (web browser)">Beaker</a></li> <li><a href="/wiki/Citrio" title="Citrio">Citrio</a></li> <li><a href="/wiki/Flock_(web_browser)" title="Flock (web browser)">Flock</a></li> <li><a href="/wiki/Redcore" title="Redcore">Redcore</a></li> <li><a href="/wiki/Rockmelt" title="Rockmelt">Rockmelt</a></li> <li><a href="/wiki/SalamWeb" title="SalamWeb">SalamWeb</a></li> <li><a href="/wiki/Sputnik_(search_engine)#Browser" title="Sputnik (search engine)">Sputnik</a></li> <li><a href="/wiki/Torch_(web_browser)" title="Torch (web browser)">Torch</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Gecko_(software)" title="Gecko (software)">Gecko</a>-based</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Beonex_Communicator" title="Beonex Communicator">Beonex</a></li> <li><a href="/wiki/Camino_(web_browser)" title="Camino (web browser)">Camino</a></li> <li><a href="/wiki/Classilla" title="Classilla">Classilla</a></li> <li><a href="/wiki/Conkeror" title="Conkeror">Conkeror</a></li> <li><a href="/wiki/Firefox_Lite" title="Firefox Lite">Firefox Lite</a></li> <li><a href="/wiki/Galeon" title="Galeon">Galeon</a></li> <li><a href="/wiki/Ghostzilla" title="Ghostzilla">Ghostzilla</a></li> <li><a href="/wiki/Comodo_IceDragon" title="Comodo IceDragon">IceDragon</a></li> <li><a href="/wiki/Kazehakase" title="Kazehakase">Kazehakase</a></li> <li><a href="/wiki/Kylo_(web_browser)" title="Kylo (web browser)">Kylo</a></li> <li><a href="/wiki/IBM_Lotus_Symphony" title="IBM Lotus Symphony">Lotus</a></li> <li><a href="/wiki/MicroB" title="MicroB">MicroB</a></li> <li><a href="/wiki/Minimo" title="Minimo">Minimo</a></li> <li><a href="/wiki/Mozilla_Application_Suite" title="Mozilla Application Suite">Mozilla suite</a></li> <li><a href="/wiki/PirateBrowser" title="PirateBrowser">PirateBrowser</a></li> <li><a href="/wiki/AT%26T_Pogo" title="AT&amp;T Pogo">Pogo</a></li> <li><a href="/wiki/Kirix_Strata" title="Kirix Strata">Strata</a></li> <li><a href="/wiki/Swiftfox" title="Swiftfox">Swiftfox</a></li> <li><a href="/wiki/Swiftweasel" title="Swiftweasel">Swiftweasel</a></li> <li><a href="/wiki/TenFourFox" class="mw-redirect" title="TenFourFox">TenFourFox</a></li> <li><a href="/wiki/Timberwolf_(web_browser)" title="Timberwolf (web browser)">Timberwolf</a></li> <li><a href="/wiki/XB_Browser" title="XB Browser">xB</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Trident_(software)" title="Trident (software)">MSHTML</a>-based</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Internet_Explorer" title="Internet Explorer">Internet Explorer</a></li> <li><a href="/wiki/AOL_Explorer" title="AOL Explorer">AOL</a></li> <li><a href="/wiki/Deepnet_Explorer" title="Deepnet Explorer">Deepnet</a></li> <li><a href="/wiki/GreenBrowser" title="GreenBrowser">GreenBrowser</a></li> <li><a href="/wiki/MediaBrowser" title="MediaBrowser">MediaBrowser</a></li> <li><a href="/wiki/NeoPlanet" title="NeoPlanet">NeoPlanet</a></li> <li><a href="/wiki/NetCaptor" title="NetCaptor">NetCaptor</a></li> <li><a href="/wiki/SpaceTime_(software)#SpaceTime_Browser" title="SpaceTime (software)">SpaceTime</a></li> <li><a href="/wiki/ZAC_Browser" title="ZAC Browser">ZAC</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/WebKit" title="WebKit">WebKit</a>-based</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Arora_(web_browser)" title="Arora (web browser)">Arora</a></li> <li><a href="/wiki/Bolt_(web_browser)" title="Bolt (web browser)">BOLT</a></li> <li><a href="/wiki/Dolphin_Browser" title="Dolphin Browser">Dolphin</a></li> <li><a href="/wiki/Fluid_(web_browser)" title="Fluid (web browser)">Fluid</a></li> <li><a href="/wiki/Google_TV_(smart_TV_platform)" class="mw-redirect" title="Google TV (smart TV platform)">Google TV</a></li> <li><a href="/wiki/Iris_Browser" title="Iris Browser">Iris</a></li> <li><a href="/wiki/Mercury_Browser" title="Mercury Browser">Mercury</a></li> <li><a href="/wiki/Nokia_Browser_for_Symbian" title="Nokia Browser for Symbian">Nokia Symbian</a></li> <li><a href="/wiki/OmniWeb" title="OmniWeb">OmniWeb</a></li> <li><a href="/wiki/Opera_Coast" title="Opera Coast">Opera Coast</a></li> <li><a href="/wiki/Origyn_Web_Browser" title="Origyn Web Browser">Origyn</a></li> <li><a href="/wiki/QtWeb" title="QtWeb">QtWeb</a></li> <li><a href="/wiki/Shiira" title="Shiira">Shiira</a></li> <li><a href="/wiki/Steel_(web_browser)" title="Steel (web browser)">Steel</a></li> <li><a href="/wiki/Surf_(web_browser)" title="Surf (web browser)">surf</a></li> <li><a href="/wiki/Uzbl" title="Uzbl">Uzbl</a></li> <li><a href="/wiki/WebPositive" class="mw-redirect" title="WebPositive">WebPositive</a></li> <li><a href="/wiki/Xombrero" title="Xombrero">xombrero</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Other</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Abaco_(web_browser)" title="Abaco (web browser)">abaco</a></li> <li><a href="/wiki/Amaya_(web_editor)" title="Amaya (web editor)">Amaya</a></li> <li><a href="/wiki/Arachne_(web_browser)" title="Arachne (web browser)">Arachne</a></li> <li><a href="/wiki/Arena_(web_browser)" title="Arena (web browser)">Arena</a></li> <li><a href="/wiki/Blazer_(web_browser)" title="Blazer (web browser)">Blazer</a></li> <li><a href="/wiki/Cake_Browser" title="Cake Browser">Cake</a></li> <li><a href="/wiki/Charon_(web_browser)" title="Charon (web browser)">Charon</a></li> <li><a href="/wiki/CM_Browser" title="CM Browser">CM</a></li> <li><a href="/wiki/Microsoft_Live_Labs_Deepfish" title="Microsoft Live Labs Deepfish">Deepfish</a></li> <li><a href="/wiki/Dillo" title="Dillo">Dillo</a></li> <li><a href="/wiki/Microsoft_Edge_Legacy" class="mw-redirect" title="Microsoft Edge Legacy">Edge Legacy</a></li> <li><a href="/wiki/ELinks" title="ELinks">ELinks</a></li> <li><a href="/wiki/Gazelle_(web_browser)" title="Gazelle (web browser)">Gazelle</a></li> <li><a href="/wiki/HotJava" title="HotJava">HotJava</a></li> <li><a href="/wiki/IBM_Home_Page_Reader" title="IBM Home Page Reader">IBM Home Page Reader</a></li> <li><a href="/wiki/IBM_WebExplorer" title="IBM WebExplorer">IBM WebExplorer</a></li> <li><a href="/wiki/IBrowse" title="IBrowse">IBrowse</a></li> <li><a href="/wiki/Internet_Explorer_for_Mac" title="Internet Explorer for Mac">Internet Explorer for Mac</a></li> <li><a href="/wiki/KidZui" title="KidZui">KidZui</a></li> <li><a href="/wiki/Line_Mode_Browser" title="Line Mode Browser">Line Mode</a></li> <li><a href="/wiki/Mosaic_(web_browser)" class="mw-redirect" title="Mosaic (web browser)">Mosaic</a></li> <li><a href="/wiki/MSN_TV" title="MSN TV">MSN TV</a></li> <li><a href="/wiki/NetPositive" class="mw-redirect" title="NetPositive">NetPositive</a></li> <li><a href="/wiki/Netscape_(web_browser)" title="Netscape (web browser)">Netscape</a></li> <li><a href="/wiki/Skweezer" title="Skweezer">Skweezer</a></li> <li><a href="/wiki/Skyfire_(company)" title="Skyfire (company)">Skyfire</a></li> <li><a href="/wiki/ThunderHawk" title="ThunderHawk">ThunderHawk</a></li> <li><a href="/wiki/Vision_Mobile_Browser" title="Vision Mobile Browser">Vision</a></li> <li><a href="/wiki/WinWAP" title="WinWAP">WinWAP</a></li> <li><a href="/wiki/WorldWideWeb" title="WorldWideWeb">WorldWideWeb</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr></tbody></table><div></div></td></tr><tr><td class="navbox-abovebelow" colspan="2"><div> <ul><li><a href="/wiki/Category:Web_browsers" title="Category:Web browsers">Category</a></li> <li><a href="/wiki/Comparison_of_web_browsers" title="Comparison of web browsers">Comparisons</a></li> <li><a href="/wiki/List_of_web_browsers" title="List of web browsers">List</a></li></ul> </div></td></tr></tbody></table></div> <div class="navbox-styles"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1236075235"></div><div role="navigation" class="navbox" aria-labelledby="Web_interfaces" style="padding:3px"><table class="nowraplinks mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1239400231"><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/wiki/Template:Web_interfaces" title="Template:Web interfaces"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:Web_interfaces" title="Template talk:Web interfaces"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:Web_interfaces" title="Special:EditPage/Template:Web interfaces"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="Web_interfaces" style="font-size:114%;margin:0 4em"><a href="/wiki/Web_API" title="Web API">Web interfaces</a></div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><td class="navbox-abovebelow" colspan="2" style="font-weight:bold"><div id="Server-side"><a href="/wiki/Server-side" class="mw-redirect" title="Server-side">Server-side</a></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Communication_protocol" title="Communication protocol">Protocols</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/HTTP" title="HTTP">HTTP</a> <ul><li><a href="/wiki/HTTP/2" title="HTTP/2">v2</a></li> <li><a href="/wiki/HTTP/3" title="HTTP/3">v3</a></li> <li><a href="/wiki/HTTPS" title="HTTPS">Encryption</a></li> <li><a href="/wiki/WebDAV" title="WebDAV">WebDAV</a></li></ul></li> <li><a href="/wiki/Common_Gateway_Interface" title="Common Gateway Interface">CGI</a></li> <li><a href="/wiki/Simple_Common_Gateway_Interface" title="Simple Common Gateway Interface">SCGI</a></li> <li><a href="/wiki/FastCGI" title="FastCGI">FCGI</a></li> <li><a href="/wiki/Apache_JServ_Protocol" title="Apache JServ Protocol">AJP</a></li> <li><a href="/wiki/Web_Services_for_Remote_Portlets" title="Web Services for Remote Portlets">WSRP</a></li> <li><a class="mw-selflink selflink">WebSocket</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Server_application_programming_interface" title="Server application programming interface">Server APIs</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Netscape_Server_Application_Programming_Interface" title="Netscape Server Application Programming Interface">C NSAPI</a></li> <li><a href="/wiki/Apache_HTTP_Server#Feature_overview" title="Apache HTTP Server">C ASAPI</a></li> <li><a href="/wiki/Internet_Server_Application_Programming_Interface" title="Internet Server Application Programming Interface">C ISAPI</a></li> <li><a href="/wiki/Active_Server_Pages" title="Active Server Pages">COM ASP</a></li> <li><a href="/wiki/Jakarta_Servlet" title="Jakarta Servlet">Jakarta Servlet</a> <ul><li><a href="/wiki/Web_container" title="Web container">container</a></li></ul></li> <li><a href="/wiki/Open_Web_Interface_for_.NET" title="Open Web Interface for .NET">CLI OWIN</a></li> <li><a href="/wiki/HTTP_handler" title="HTTP handler">ASP.NET Handler</a></li> <li><a href="/wiki/Web_Server_Gateway_Interface" title="Web Server Gateway Interface">Python WSGI</a></li> <li><a href="/wiki/Asynchronous_Server_Gateway_Interface" title="Asynchronous Server Gateway Interface">Python ASGI</a></li> <li><a href="/wiki/Rack_(web_server_interface)" title="Rack (web server interface)">Ruby Rack</a></li> <li><a href="/wiki/JSGI" title="JSGI">JavaScript JSGI</a></li> <li><a href="/wiki/Plack_(software)#PSGI" title="Plack (software)">Perl PSGI</a></li> <li><a href="/wiki/Java_Portlet_Specification" title="Java Portlet Specification">Portlet</a> <ul><li><a href="/wiki/Java_Portlet_Specification" title="Java Portlet Specification">container</a></li></ul></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/List_of_Apache_modules" title="List of Apache modules">Apache modules</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Server_Side_Includes" title="Server Side Includes">mod_include</a></li> <li><a href="/wiki/Mod_jk" class="mw-redirect" title="Mod jk">mod_jk</a></li> <li><a href="/wiki/Mod_lisp" title="Mod lisp">mod_lisp</a></li> <li><a href="/wiki/Mod_mono" title="Mod mono">mod_mono</a></li> <li><a href="/wiki/Mod_parrot" class="mw-redirect" title="Mod parrot">mod_parrot</a></li> <li><a href="/wiki/Mod_perl" title="Mod perl">mod_perl</a></li> <li><a href="/wiki/PHP" title="PHP">mod_php</a></li> <li><a href="/wiki/Mod_proxy" title="Mod proxy">mod_proxy</a></li> <li><a href="/wiki/Mod_python" title="Mod python">mod_python</a></li> <li><a href="/wiki/Mod_wsgi" title="Mod wsgi">mod_wsgi</a></li> <li><a href="/wiki/Mod_ruby" title="Mod ruby">mod_ruby</a></li> <li><a href="/wiki/Phusion_Passenger" title="Phusion Passenger">Phusion Passenger</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Topics</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Web_service" title="Web service">Web service</a> vs. <a href="/wiki/Web_resource" title="Web resource">Web resource</a></li> <li><a href="/wiki/Web-oriented_architecture" title="Web-oriented architecture">WOA</a> vs. <a href="/wiki/Resource-oriented_architecture" title="Resource-oriented architecture">ROA</a></li> <li><a href="/wiki/Open_API" title="Open API">Open API</a></li> <li><a href="/wiki/Webhook" title="Webhook">Webhook</a></li> <li><a href="/wiki/Application_server" title="Application server">Application server</a> <ul><li><a href="/wiki/List_of_application_servers" title="List of application servers">comparison</a></li></ul></li> <li><a href="/wiki/Server-side_scripting" title="Server-side scripting">Scripting</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr><tr><td colspan="2" class="navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><td class="navbox-abovebelow" colspan="2" style="font-weight:bold"><div id="Client-side"><a href="/wiki/Client-side" class="mw-redirect" title="Client-side">Client-side</a></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Plug-in_(computing)" title="Plug-in (computing)">Browser APIs</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/NPAPI" title="NPAPI">C NPAPI</a> <ul><li><a href="/wiki/NPAPI#LiveConnect" title="NPAPI">LiveConnect</a></li> <li><a href="/wiki/NPAPI#XPConnect" title="NPAPI">XPConnect</a></li></ul></li> <li><a href="/wiki/NPAPI#NPRuntime" title="NPAPI">C NPRuntime</a></li> <li><a href="/wiki/Google_Native_Client#Pepper" title="Google Native Client">C PPAPI</a> <ul><li><a href="/wiki/Google_Native_Client" title="Google Native Client">NaCl</a></li></ul></li> <li><a href="/wiki/ActiveX" title="ActiveX">ActiveX</a></li> <li><a href="/wiki/Browser_Helper_Object" title="Browser Helper Object">BHO</a></li> <li><a href="/wiki/XAML_Browser_Applications" title="XAML Browser Applications">XBAP</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Web_API#Client_side" title="Web API">Web APIs</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/WHATWG" title="WHATWG">WHATWG</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/HTML_audio" title="HTML audio">Audio</a></li> <li><a href="/wiki/Canvas_element" title="Canvas element">Canvas</a></li> <li><a href="/wiki/Document_Object_Model" title="Document Object Model">DOM</a></li> <li><a href="/wiki/Server-sent_events" title="Server-sent events">SSE</a></li> <li><a href="/wiki/HTML_video" title="HTML video">Video</a></li> <li><a class="mw-selflink selflink">WebSockets</a></li> <li><a href="/wiki/Web_Messaging" title="Web Messaging">Web messaging</a></li> <li><a href="/wiki/Web_storage" title="Web storage">Web storage</a></li> <li><a href="/wiki/Web_worker" title="Web worker">Web worker</a></li> <li><a href="/wiki/XMLHttpRequest" title="XMLHttpRequest">XMLHttpRequest</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/World_Wide_Web_Consortium" title="World Wide Web Consortium">W3C</a></th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/DOM_event" title="DOM event">DOM events</a></li> <li><a href="/wiki/Encrypted_Media_Extensions" title="Encrypted Media Extensions">EME</a></li> <li><a href="/wiki/HTML5_File_API" title="HTML5 File API">File</a></li> <li><a href="/wiki/W3C_Geolocation_API" title="W3C Geolocation API">Geolocation</a></li> <li><a href="/wiki/Indexed_Database_API" title="Indexed Database API">IndexedDB</a></li> <li><a href="/wiki/Media_Source_Extensions" title="Media Source Extensions">MSE</a></li> <li><a href="/wiki/SVG" title="SVG">SVG</a></li> <li><a href="/wiki/WebAssembly" title="WebAssembly">WebAssembly</a></li> <li><a href="/wiki/WebAuthn" title="WebAuthn">WebAuthn</a></li> <li><a href="/wiki/WebGPU" title="WebGPU">WebGPU</a></li> <li><a href="/wiki/WebRTC" title="WebRTC">WebRTC</a></li> <li><a href="/wiki/WebXR" title="WebXR">WebXR</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%"><a href="/wiki/Khronos_Group" title="Khronos Group">Khronos</a></th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/WebCL" title="WebCL">WebCL</a></li> <li><a href="/wiki/WebGL" title="WebGL">WebGL</a></li></ul> </div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Others</th><td class="navbox-list-with-group navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Gears_(software)" title="Gears (software)">Gears</a></li> <li><a href="/wiki/Web_SQL_Database" title="Web SQL Database">Web SQL Database</a> (formerly W3C)</li> <li><a href="/wiki/WebUSB" title="WebUSB">WebUSB</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr><tr><th scope="row" class="navbox-group" style="width:1%">Topics</th><td class="navbox-list-with-group navbox-list navbox-even" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Ajax_(programming)" title="Ajax (programming)">Ajax</a> and <a href="/wiki/Remote_scripting" title="Remote scripting">Remote scripting</a> vs. <a href="/wiki/Dynamic_HTML" title="Dynamic HTML">DHTML</a></li> <li><a href="/wiki/Browser_extension" title="Browser extension">Browser extension</a></li> <li><a href="/wiki/Cross-site_scripting" title="Cross-site scripting">Cross-site scripting</a> and <a href="/wiki/Cross-origin_resource_sharing" title="Cross-origin resource sharing">CORS</a></li> <li><a href="/wiki/Hydration_(web_development)" title="Hydration (web development)">Hydration</a></li> <li><a href="/wiki/Mashup_(web_application_hybrid)" title="Mashup (web application hybrid)">Mashup</a></li> <li><a href="/wiki/Client-side_persistent_data" title="Client-side persistent data">Persistent data</a></li> <li><a href="/wiki/Web_IDL" title="Web IDL">Web IDL</a></li> <li><a href="/wiki/Dynamic_web_page#Client-side_scripting" title="Dynamic web page">Scripting</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr><tr><td colspan="2" class="navbox-list navbox-odd hlist" style="width:100%;padding:0"><div style="padding:0 0.25em"></div><table class="nowraplinks navbox-subgroup" style="border-spacing:0"><tbody><tr><td class="navbox-abovebelow" colspan="2"><div id="Related_topics">Related topics</div></td></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Frontend_and_backend" title="Frontend and backend">Frontend and backend</a></li> <li><a href="/wiki/Microservices" title="Microservices">Microservices</a> <ul><li><a href="/wiki/REST" title="REST">REST</a></li> <li><a href="/wiki/GraphQL" title="GraphQL">GraphQL</a></li></ul></li> <li><a href="/wiki/Push_technology" title="Push technology">Push technology</a></li> <li><a href="/wiki/Solution_stack" title="Solution stack">Solution stack</a></li> <li><a href="/wiki/Web_page" title="Web page">Web page</a> <ul><li><a href="/wiki/Static_web_page" title="Static web page">Static</a></li> <li><a href="/wiki/Dynamic_web_page" title="Dynamic web page">Dynamic</a></li></ul></li> <li><a href="/wiki/Web_standards" title="Web standards">Web standards</a></li> <li><a href="/wiki/Web_API_security" title="Web API security">Web API security</a></li> <li><a href="/wiki/Web_application" title="Web application">Web application</a> <ul><li><a href="/wiki/Rich_Internet_Application" title="Rich Internet Application">Rich</a></li> <li><a href="/wiki/Single-page_application" title="Single-page application">Single-page</a></li> <li><a href="/wiki/Progressive_web_app" title="Progressive web app">Progressive</a></li></ul></li> <li><a href="/wiki/Web_framework" title="Web framework">Web framework</a></li></ul> </div></td></tr></tbody></table><div></div></td></tr></tbody></table></div> <!-- NewPP limit report Parsed by mw‐web.codfw.main‐f69cdc8f6‐xz5ct Cached time: 20241122144323 Cache expiry: 2592000 Reduced expiry: false Complications: [vary‐revision‐sha1, show‐toc] CPU time usage: 0.993 seconds Real time usage: 1.400 seconds Preprocessor visited node count: 15370/1000000 Post‐expand include size: 290930/2097152 bytes Template argument size: 9109/2097152 bytes Highest expansion depth: 19/100 Expensive parser function count: 7/500 Unstrip recursion depth: 1/20 Unstrip post‐expand size: 336029/5000000 bytes Lua time usage: 0.524/10.000 seconds Lua memory usage: 6165253/52428800 bytes Number of Wikibase entities loaded: 1/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 1184.813 1 -total 47.03% 557.186 2 Template:Reflist 21.58% 255.730 34 Template:Cite_IETF 17.67% 209.363 45 Template:Cite_web 10.64% 126.036 1 Template:Short_description 8.24% 97.591 1 Template:Web_browsers 8.00% 94.754 1 Template:Navbox_with_collapsible_groups 6.64% 78.698 1 Template:Infobox_protocol 6.34% 75.099 1 Template:Infobox 5.89% 69.817 6 Template:Main_other --> <!-- Saved in parser cache with key enwiki:pcache:idhash:25553718-0!canonical and timestamp 20241122144323 and revision id 1250439164. Rendering was triggered because: page-view --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://en.wikipedia.org/w/index.php?title=WebSocket&amp;oldid=1250439164">https://en.wikipedia.org/w/index.php?title=WebSocket&amp;oldid=1250439164</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Help:Category" title="Help:Category">Categories</a>: <ul><li><a href="/wiki/Category:Application_layer_protocols" title="Category:Application layer protocols">Application layer protocols</a></li><li><a href="/wiki/Category:HTML5" title="Category:HTML5">HTML5</a></li><li><a href="/wiki/Category:Internet_terminology" title="Category:Internet terminology">Internet terminology</a></li><li><a href="/wiki/Category:Network_socket" title="Category:Network socket">Network socket</a></li><li><a href="/wiki/Category:Real-time_web" title="Category:Real-time web">Real-time web</a></li><li><a href="/wiki/Category:Web_development" title="Category:Web development">Web development</a></li><li><a href="/wiki/Category:2011_in_computing" title="Category:2011 in computing">2011 in computing</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Hidden categories: <ul><li><a href="/wiki/Category:Webarchive_template_wayback_links" title="Category:Webarchive template wayback links">Webarchive template wayback links</a></li><li><a href="/wiki/Category:Articles_with_short_description" title="Category:Articles with short description">Articles with short description</a></li><li><a href="/wiki/Category:Short_description_matches_Wikidata" title="Category:Short description matches Wikidata">Short description matches Wikidata</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 10 October 2024, at 12:27<span class="anonymous-show">&#160;(UTC)</span>.</li> <li id="footer-info-copyright">Text is available under the <a href="/wiki/Wikipedia:Text_of_the_Creative_Commons_Attribution-ShareAlike_4.0_International_License" title="Wikipedia:Text of the Creative Commons Attribution-ShareAlike 4.0 International License">Creative Commons Attribution-ShareAlike 4.0 License</a>; additional terms may apply. By using this site, you agree to the <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use" class="extiw" title="foundation:Special:MyLanguage/Policy:Terms of Use">Terms of Use</a> and <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy" class="extiw" title="foundation:Special:MyLanguage/Policy:Privacy policy">Privacy Policy</a>. Wikipedia® is a registered trademark of the <a rel="nofollow" class="external text" href="https://wikimediafoundation.org/">Wikimedia Foundation, Inc.</a>, a non-profit organization.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:About">About Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:General_disclaimer">Disclaimers</a></li> <li id="footer-places-contact"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact Wikipedia</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/en.wikipedia.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//en.m.wikipedia.org/w/index.php?title=WebSocket&amp;mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-f69cdc8f6-7jdc6","wgBackendResponseTime":152,"wgPageParseReport":{"limitreport":{"cputime":"0.993","walltime":"1.400","ppvisitednodes":{"value":15370,"limit":1000000},"postexpandincludesize":{"value":290930,"limit":2097152},"templateargumentsize":{"value":9109,"limit":2097152},"expansiondepth":{"value":19,"limit":100},"expensivefunctioncount":{"value":7,"limit":500},"unstrip-depth":{"value":1,"limit":20},"unstrip-size":{"value":336029,"limit":5000000},"entityaccesscount":{"value":1,"limit":400},"timingprofile":["100.00% 1184.813 1 -total"," 47.03% 557.186 2 Template:Reflist"," 21.58% 255.730 34 Template:Cite_IETF"," 17.67% 209.363 45 Template:Cite_web"," 10.64% 126.036 1 Template:Short_description"," 8.24% 97.591 1 Template:Web_browsers"," 8.00% 94.754 1 Template:Navbox_with_collapsible_groups"," 6.64% 78.698 1 Template:Infobox_protocol"," 6.34% 75.099 1 Template:Infobox"," 5.89% 69.817 6 Template:Main_other"]},"scribunto":{"limitreport-timeusage":{"value":"0.524","limit":"10.000"},"limitreport-memusage":{"value":6165253,"limit":52428800}},"cachereport":{"origin":"mw-web.codfw.main-f69cdc8f6-xz5ct","timestamp":"20241122144323","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"WebSocket","url":"https:\/\/en.wikipedia.org\/wiki\/WebSocket","sameAs":"http:\/\/www.wikidata.org\/entity\/Q859938","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q859938","author":{"@type":"Organization","name":"Contributors to Wikimedia projects"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2009-12-25T07:16:22Z","dateModified":"2024-10-10T12:27:45Z","image":"https:\/\/upload.wikimedia.org\/wikipedia\/commons\/1\/10\/Websocket_connection.png","headline":"computer network protocol"}</script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10