WebSocket
此條 |
WebSocket
WebSocket
简介[编辑]
WebSocketit is designed to work over HTTP ports 80 and 443 as well as to support HTTP proxies and intermediaries
(WebSocket
WebSocket协议
WebSocket协议规范ws
(WebSocket)wss
(WebSocket Secure)#
)
历史[编辑]
WebSocket
“WebSocket”这个
该协议被
背景 [编辑]
Websocketws
wss
wss
ws://example.com/wsapi wss://secure.example.com/wsapi
Websocket
优点[编辑]
- 较少
的 控 制 开销。在 连接建立 后 ,服 务器和 客 户端之 间交换数据 时,用 于协议控制 的 数 据 包 头部相 对较小 。在 不 包含 扩展的 情 况下,对于服 务器到 客 户端的 内容 ,此头部 大小 只 有 2至 10字 节(和 数 据 包 长度有 关);对于客 户端到 服 务器的 内容 ,此头部 还需要 加 上 额外的 4字 节的掩码。相 对于HTTP请求每次 都 要 携带完 整 的 头部,此项开销显著减少了 。
更 强的 实时性 。由 于协议是全 双 工 的 ,所以 服 务器可 以随时主动给客 户端下 发数据 。相 对于HTTP请求需要 等 待 客 户端发起请求服 务端才能 响应,延 迟明显更少 ;即 使 是 和 Comet等 类似的 长轮询比 较,其也能 在 短 时间内 更 多 次 地 传递数 据 。
保持 连接状 态。与 HTTP不同 的 是 ,Websocket需要 先 建立 连接,这就使 得 其成为一种有状态的协议,之 后 通信 时可以省略 部分 状 态信息 。而HTTP请求可能 需要 在 每 个请求 都 携带状 态信息 (如身份认证等)。
更 好 的 二 进制支持 。Websocket定 义了二 进制帧,相 对HTTP,可 以更轻松地 处理二 进制内容 。
可 以支持 扩展。Websocket定 义了扩展,用 户可以扩展 协议、实现部分 自 定 义的子 协议。如部分 浏览器 支持 压缩等 。
握手 协议[编辑]
WebSocket
Websocket
为了
例 子 [编辑]
GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ== Origin: http://example.com Sec-WebSocket-Protocol: chat, superchat Sec-WebSocket-Version: 13
HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo= Sec-WebSocket-Protocol: chat
字 段 说明[编辑]
- Connection必须设置Upgrade,
表示 客 户端希望 连接升 级。 - Upgrade
字 段 必须设置Websocket,表示 希望 升 级到Websocket协议。 - Sec-WebSocket-Key
是 随 机 的 字 符 串 ,服 务器端 会 用 这些数 据 来 构造出 一 个SHA-1的 信 息 摘要 。把 “Sec-WebSocket-Key”加 上 一个特殊字符串“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”,然 后 计算SHA-1摘要 ,之 后 进行Base64编码,将 结果做为“Sec-WebSocket-Accept”头的值,返 回 给客户端。如此操作 ,可 以尽量 避免普通 HTTP请求被 误认为Websocket协议。 - Sec-WebSocket-Version
表示 支持 的 Websocket版本 。RFC6455要求 使用 的 版本 是 13,之 前 草案 的 版本 均 应当弃用。 - Origin
字 段 是 必须的 。如果缺 少 origin字 段 ,WebSocket服 务器需要 回 复HTTP 403状 态码(禁止 访问)。[16] - 其他
一 些定义在HTTP协议中 的 字 段 ,如Cookie等 ,也可以在Websocket中 使用 。
浏览器 支持 [编辑]
WebSocket协议
Opera 11
协议 | 发布 |
IE | Firefox[25](个人电脑) | Firefox (Android) | Chrome(个人电脑, |
Safari(Mac, iOS) | Opera(个人电脑, |
Android浏览 |
---|---|---|---|---|---|---|---|---|
hixie-75 (页面 |
2010 |
4 | 5.0.0 | |||||
hixie-76(页面 hybi-00 (页面 |
2010 2010 |
4.0( |
6 | 5.0.1 | 11.00( |
|||
7 hybi-07(页面 |
2011 |
6[26]1 | ||||||
8 hybi-10 (页面 |
2011 |
7[27]1 | 7 | 14[28] | ||||
13 RFC 6455 | 2011 |
10[29] | 11 | 11 | 16[30] | 6 | 12.10[31] | 4.4[32] |
1
服 务器[编辑]
- PHP - https://code.google.com/p/phpwebsocket/ (页面
存 档备份,存 于互联网档案 馆) - jetty (页面
存 档备份,存 于互联网档案 馆)(版本 7开始支持 websocket) - netty (页面
存 档备份,存 于互联网档案 馆) - Ruby - https://github.com/gimite/web-socket-ruby (页面
存 档备份,存 于互联网档案 馆) - Kaazing
- Tomcat(7.0.27
支持 websocket,建 议用tomcat8,7.0.27中 的 接 口 已 经过时) - WebLogic (页面
存 档备份,存 于互联网档案 馆)(12.1.2開始 支持 ) - Node.js - https://github.com/Worlize/WebSocket-Node (页面
存 档备份,存 于互联网档案 馆) - Node.js - http://socket.io (页面
存 档备份,存 于互联网档案 馆) - Nginx
- mojolicious (页面
存 档备份,存 于互联网档案 馆) - Python - https://github.com/abourget/gevent-socketio (页面
存 档备份,存 于互联网档案 馆) - Django (页面
存 档备份,存 于互联网档案 馆) - erlang - https://github.com/ninenines/cowboy (页面
存 档备份,存 于互联网档案 馆)
参考 资料[编辑]
- ^ Ian Fette; Alexey Melnikov. Relationship to TCP and HTTP. RFC 6455 The WebSocket Protocol. IETF. December 2011: sec. 1.7. RFC 6455.
- ^ Glossary:WebSockets. Mozilla Developer Network. 2015 [2019-05-09]. (
原始 内容 存 档于2016-09-14). - ^ HTML5 WebSocket: A Quantum Leap in Scalability for the Web. [2019-05-09]. (
原始 内容 存 档于2021-04-01). - ^ Graham Klyne (编). IANA Uniform Resource Identifer (URI) Schemes. Internet Assigned Numbers Authority. 2011-11-14 [2011-12-10]. (
原始 内容 存 档于2013-04-25). - ^ Ian Fette; Alexey Melnikov. WebSocket URIs. RFC 6455 The WebSocket Protocol. IETF. December 2011: sec. 3. RFC 6455.
- ^ Wang, Vanessa; Salim, Frank; Moskovits, Peter. APPENDIX A: WebSocket Frame Inspection with Google Chrome Developer Tools. The Definitive Guide to HTML5 WebSocket. Apress. February 2013 [7 April 2013]. ISBN 978-1-4302-4740-1. (
原始 内容 存 档于2015-12-31). - ^ HTML 5. www.w3.org. [2016-04-17]. (
原始 内容 存 档于2016-09-16). - ^ [whatwg] TCPConnection feedback from Michael Carter on 2008-06-18 (whatwg.org from June 2008). lists.w3.org. [2016-04-17]. (
原始 内容 存 档于2016-04-27). - ^ IRC logs: freenode / #whatwg / 20080618. krijnhoetmer.nl. [2016-04-18]. (
原始 内容 存 档于2016-08-21). - ^ Comet Daily » Blog Archive » Independence Day: HTML5 WebSocket Liberates Comet From Hacks. [2016-04-17]. (
原始 内容 存 档于2016-04-23). - ^ Web Sockets Now Available In Google Chrome. Chromium Blog. [2016-04-17]. (
原始 内容 存 档于2021-12-09) (美国 英 语). - ^ <ian@hixie.ch>, Ian Hickson. The WebSocket protocol. tools.ietf.org. [2016-04-17]. (
原始 内容 存 档于2017-03-17). - ^ <ian@hixie.ch>, Ian Hickson. The WebSocket protocol. tools.ietf.org. [2016-04-17]. (
原始 内容 存 档于2017-03-06). - ^
存 档副本 . [2017-01-17]. (原始 内容 存 档于2020-11-11). - ^
存 档副本 . [2019-05-09]. (原始 内容 存 档于2017-03-06). - ^ RFC 6455 - The WebSocket Protocol. IETF Tools. [2019-05-09]. (
原始 内容 存 档于2017-03-06).Servers that are not intended to process input from any web page but only for certain sites SHOULD verify the |Origin| field is an origin they expect. If the origin indicated is unacceptable to the server, then it SHOULD respond to the WebSocket handshake with a reply containing HTTP 403 Forbidden status code.
- ^ Dirkjan Ochtman. WebSocket enabled in Firefox 6. Mozilla.org. May 27, 2011 [2011-06-30]. (
原始 内容 存 档于2012-05-26). - ^ Chromium Web Platform Status. [2011-08-03]. (
原始 内容 存 档于2017-03-04). - ^ WebSockets (Windows). Microsoft. 2012-09-28 [2012-11-07]. (
原始 内容 存 档于2015-03-25). - ^ 20.0 20.1 WebSockets Protocol Test Report. Tavendo.de. 2011-10-27 [2011-12-10]. (
原始 内容 存 档于2016-09-22). - ^ Katie Marsal. Apple adds accelerometer, WebSockets support to Safari in iOS 4.2. AppleInsider.com. November 23, 2010 [2011-05-09]. (
原始 内容 存 档于2013-07-17). - ^ Web Sockets API. BlackBerry. [8 July 2011]. (
原始 内容 存 档于2011-06-10). - ^ Chris Heilmann. WebSocket disabled in Firefox 4. Hacks.Mozilla.org. December 8, 2010 [2011-05-09]. (
原始 内容 存 档于2017-03-06). - ^ Aleksander Aas. Regarding WebSocket. My Opera Blog. December 10, 2010 [2011-05-09]. (
原始 内容 存 档于2010-12-15). - ^ WebSockets (support in Firefox). Developer.mozilla.org. 2011-09-30 [2011-12-10]. (
原始 内容 存 档于2012-05-26). - ^ Bug 640003 - WebSockets - upgrade to ietf-06. Bugzilla.mozilla.org. [2011-12-10]. (
原始 内容 存 档于2021-04-01). - ^ WebSockets - upgrade to ietf-07 (页面
存 档备份,存 于互联网档案 馆)> - ^ Chromium bug 64470. Code.google.com. 2010-11-25 [2011-12-10]. (
原始 内容 存 档于2015-12-31). - ^ WebSockets in Windows Consumer Preview. IE Engineering Team. 2012-03-19 [2012-07-23]. (
原始 内容 存 档于2012-08-07). - ^ WebKit Changeset 97247: WebSocket: Update WebSocket protocol to hybi-17. Trac.webkit.org. [2011-12-10]. (
原始 内容 存 档于2015-12-31). - ^ A hot Opera 12.50 summer-time snapshot. Opera Developer News. [2012-08-03]. (
原始 内容 存 档于2012-08-05). - ^ Compatibility tables for support of HTML5, CSS3, SVG and more in desktop and mobile browsers. caniuse.com. [2014-02-10]. (
原始 内容 存 档于2017-04-08). - ^ WebSockets - MDN. Developer.mozilla.org. 2011-09-30 [2011-12-10]. (
原始 内容 存 档于2012-05-26).
|
|