1、WebSocket 和 http 有什么区别?
- webscoket 是双向通信协议,模拟 Scoket 协议,可以双向发送或接收消息。而 HTTP 是单向的。
- Websocket 是需要浏览器和服务器握手建立连接的,而 HTTP 是浏览器向服务器发送请求,服务器预先不知道这个连接。
- Webscoket 没有同源限制,客户端可与任何服务器通信。
2、WebSocket 和 scoket 有什么区别?
Scoket 是传输控制层接口,它是在程序层面上对传输层协议(可以主要理解为 TCP/IP)的接口封装。 我们知道传输层的协议,是解决数据在网络中传输的,那么 socket 就是传输通道两端的接口。所以对于前端而言,socket 也可以简单的理解为对 TCP/IP的抽象协议。
Webscoket 是应用层协议,它是包装成了一个应用层协议作为 socket,从而能够让客户端和远程服务端通过 web 建立全双工通信。websocket 提供 ws 和 wss 两种URL方案。
3、http 和 WebSocket 能共用一个端口吗,为什么?
websocket是http的升级版(upgrade),我们只需要定制http服务器的upgrade函数即可。让upgrade函数充当websocket的路由器(多个websocket共用同一端口可以通过路由器来转发)。
4、WebSocket 如何做心跳检测、数据加密、身份验证?
5、WebSocket 握手阶段是通过什么协议传输的?握手成功后会返回一个什么状态?200吗?
ws 握手阶段采用的是http协议。
readyState 属性返回实例对象的当前状态,共有四种:
- CONNECTING:值为 0,表示正在连接。
- OPEN:值为 1,表示连接成功,可以通信了。
- CLOSING:值为 2,表示连接正在关闭。
- CLOSED:值为 3,表示连接已经关闭,或者打开连接失败。
返回的的状态码为 101,详见:developer.mozilla.org/zh-CN/docs/…
6、WebSocket 可以携带 cookie 吗,为什么?如果可以,怎么做到?
websocket 是TCP/IP层的链接,而cookie是应用层HTTP协议的东西,因此不能。
除非 websocket 在浏览器不支持的情况下用的降级方案。且建立了 socket 连接,只要不断开,双方就可以互发数据。想要 cookie 只要服务端告诉客户端,我需要 cookie,客户端 send 一下 document.cookie,服务器就收到了。
cookie 和 session 是为了解决http这种无状态的协议而产生的。socket 一直保持连接,不需要 cookie 这种东西。换个思路,cookie 只能保存64K的内容。而 HTML5 本地存储可以保存1M-5M的内容。如果服务器需要,也可以通过 socket 把本地存储的内容发送到服务器,发挥更多作用。
7、WebSocket 如何区分不同客户端?
两种方案:一种是通过在Server取HttpSession中的值获取当前用户,一种是直接在客户端建立连接时附带上用户的值。
参考:blog.csdn.net/qq_33171970…
8、WebSocket 和 http2 有什么区别?http2 能取代 WebSocket 吗?为什么

参考:cloud.tencent.com/developer/a…