当前位置 : 首页 » 文章分类 :  开发  »  WebSocket

WebSocket

WebSocket 笔记

WebSocket和HTTP的关系

1、 WebSocket 和 HTTP 都是基于TCP协议的两个不同的协议
2、 WebSocket 依赖于 HTTP 连接

从HTTP升级到WebSocket

WebSocket依赖于HTTP连接,那么它如何从连接的HTTP协议转化为WebSocket协议?
每个WebSocket连接都始于一个HTTP请求。
具体来说,WebSocket协议在第一次握手连接时,通过HTTP协议在传送WebSocket支持的版本号,协议的字版本号,原始地址,主机地址等等一些列字段给服务器端:

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key:dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Version: 13

注意,关键的地方是,这里面有个Upgrade首部,用来把当前的HTTP请求升级到WebSocket协议,这是HTTP协议本身的内容,是为了扩展支持其他的通讯协议。
如果服务器支持新的协议,则必须返回101:

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept:s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

至此,HTTP请求物尽其用,如果成功触发 onopen 事件,否则触发 onerror 事件,后面的传输则不再依赖HTTP协议。

WebSocket为什么要依赖于HTTP协议的连接?
第一,WebSocket设计上就是天生为HTTP增强通信(全双工通信等),所以在HTTP协议连接的基础上是很自然的一件事,并因此而能获得HTTP的诸多便利。
第二,这诸多便利中有一条很重要,基于HTTP连接将获得最大的一个兼容支持,比如即使服务器不支持WebSocket也能建立HTTP通信,只不过返回的是onerror而已,这显然比服务器无响应要好的多。

理清WebSocket和HTTP的关系
https://jayfeng.com/2016/07/25/%E7%90%86%E6%B8%85WebSocket%E5%92%8CHTTP%E7%9A%84%E5%85%B3%E7%B3%BB/

上一篇 Spring-Cloud-Netflix-Eureka

下一篇 北京中医药大学第三医院看颈椎记录

阅读
评论
451
阅读预计2分钟
创建日期 2019-12-05
修改日期 2019-12-05
类别
标签

页面信息

location:
protocol:
host:
hostname:
origin:
pathname:
href:
document:
referrer:
navigator:
platform:
userAgent:

评论