第185题:http header 怎么判断协议是不是 Websocket?
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。WebSocket 通信协议于 2011 年被 IETF 定为标准 RFC 6455,并由 RFC7936 补充规范。WebSocket API 也被 W3C 定为标准。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
引言
首先,解答本题, http 通过判断 header 中是否包含
Connection: Upgrade
与Upgrade: websocket
来判断当前协议是否要升级到 websocket ,下面我们了解一下 WebSocket 协议与由来WebSocket 由来
WebSocket 之前,如果需要在客户端和服务之间双向通信,需要通过 HTTP 轮询来实现, HTTP 轮询分为轮询与长轮询:
其中,轮询是指浏览器通过 JavaScript 启动一个定时器,然后以固定的间隔给服务器发请求,询问服务器有没有新消息,缺点:
长轮询是指浏览器发送一个请求时,服务器先拖一段时间,等到有消息了再回复。这个机制暂时地解决了实时性问题,但是它带来了新的问题:
因此,HTML5 新增了 WebSocket 协议,能够在浏览器和服务器之间建立一个不受限的双向通信的通道。
WebSocket 的优点:
WebSocket 协议
WebSocket 使用
ws
或wss
的统一资源标志符(URI),其中wss
表示使用了 TLS 的 WebSocket。http 通过判断 header 中是否包含
Connection: Upgrade
与Upgrade: websocket
来判断当前是否需要升级到 websocket 协议,除此之外,还有其它 header:Sec-WebSocket-Key
:浏览器随机生成的安全密钥Sec-WebSocket-Version
:WebSocket 协议版本Sec-WebSocket-Extensions
:用于协商本次连接要使用的 WebSocket 扩展Sec-WebSocket-Protocol
:协议当服务器同意进行 WebSocket 连接时,返回响应码
101
测试地址:https://www.websocket.org/echo.html
一旦 socket 被建立,我们就应该监听 socket 上的事件。一共有 4 个事件:
如果我们想发送消息,可以使用
socket.send(data)
总结
WebSocket 使用
ws
或wss
的统一资源标志符,通过判断 header 中是否包含Connection: Upgrade
与Upgrade: websocket
来判断当前是否需要升级到 websocket 协议,除此之外,它还包含Sec-WebSocket-Key
、Sec-WebSocket-Version
等header,当服务器同意 WebSocket 连接时,返回响应码101
,它的 API 很简单。方法:
socket.send(data)
socket.close([code], [reason])
事件:
open
message
error
close
原文
看下request header有没有
Upgrade: websocket
同时,服务端返回101状态码表示升级成功。Status Code: 101 Web Socket Protocol Handshake
websocket.org上面可以测试发送ws连接
https://www.websocket.org/echo.html