-
Notifications
You must be signed in to change notification settings - Fork 132
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
http header怎么判断协议是不是websocket #97
Comments
This was referenced May 20, 2021
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
引言
首先,解答本题, 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
参考:
WebSocket
WebSocket
你不知道的 WebSocket
The text was updated successfully, but these errors were encountered: