websocket以及http的区别笔记

区别web

'http'浏览器

HTTP1.1默认使用持久链接(persistent connection),在一个TCP链接上也能够传输多个Request/Response消息对,可是HTTP的基本模型仍是一个Request对应一个Response安全

连接方式:主要有几种bash

  • 轮询(polling),轮询就会形成对网络和通讯双方的资源的浪费,且非实时。
  • 长轮询,客户端发送一个超时时间很长的Request,服务器hold住这个链接,在有新数据到达时返回Response,相比1,占用的网络带宽少了,其余相似。稳定性有待考究
  • 长链接,其实有些人对长链接的概念是模糊不清的,我这里讲的实际上是HTTP的长链接(1)
  • 若是你使用Socket来创建TCP的长链接(2)服务器

  • 那么,这个长链接(2)跟咱们这里要讨论的WebSocket是同样的,实际上TCP长链接就是WebSocket的基础,可是若是是HTTP的长链接,本质上仍是Request/Response消息对,仍然会形成资源的浪费、实时性不强等问题。 websocket

    长连接

websocket的协议基础基于http 握手+传输网络

而真正在WS的握手过程当中起到做用的是下面几个header域。
1 Upgrade:upgrade是HTTP1.1中用于定义转换协议的header域。它表示,若是服务器支持的话,客户端但愿使用现有的「网络层」已经创建好的这个「链接(此处是TCP链接)」,切换到另一个「应用层」(此处是WebSocket)协议。

2 Connection:HTTP1.1中规定Upgrade只能应用在「直接链接」中,因此带有Upgrade头的HTTP1.1消息必须含有Connection头,由于Connection头的意义就是,任何接收到此消息的人(每每是代理服务器)都要在转发此消息以前处理掉Connection中指定的域(不转发Upgrade域)。
若是客户端和服务器之间是经过代理链接的,那么在发送这个握手消息以前首先要发送CONNECT消息来创建直接链接。

3 Sec-WebSocket-*:第7行标识了客户端支持的子协议的列表(关于子协议会在下面介绍),第8行标识了客户端支持的WS协议的版本列表,第5行用来发送给服务器使用(服务器会使用此字段组装成另外一个key值放在握手返回信息里发送客户端)。

4 Origin:做安全使用,防止跨站攻击,浏览器通常会使用这个来标识原始域。

复制代码
  • WebSocket协议Uri
1 若是上一步中的TCP链接创建失败,则此WebSocket链接失败。
2 若是协议是wss,则在上一步创建的TCP链接之上,使用TSL发送握手信息。若是失败,则此WebSocket链接失败;若是成功,则之后的全部数据都要经过此TSL通道进行发送。
复制代码
  • WebSocket使用注意点

服务端 若是请求是HTTPS,则首先要使用TLS进行握手,若是失败,则关闭链接,若是成功,则以后的数据都经过此通道进行发送socket

以后服务端能够进行一些客户端验证步骤编码

若是一切都成功,则返回成功的Response握手消息。spa

  • 服务端发送的成功的Response握手

Upgrade头域,内容为websocket

Connection头域,内容为Upgrade

Sec-WebSocket-Accept头域,其内容的生成步骤:

首先将Sec-WebSocket-Key的内容加上字符串258EAFA5-E914-47DA-95CA-C5AB0DC85B11(一个UUID)。

将#1中生成的字符串进行SHA1编码。

将#2中生成的字符串进行Base64编码。

  • Sec-WebSocket-Protocol头域(可选)
  • Sec-WebSocket-Extensions头域(可选)
与HTTP比较
一样做为应用层的协议,WebSocket在现代的软件开发中被愈来愈多的实践,和HTTP有不少类似的地方,这里将它们简单的作一个纯我的、非权威的比较:

相同点:
都是基于TCP的应用层协议。
都使用Request/Response模型进行链接的创建。
在链接的创建过程当中对错误的处理方式相同,在这个阶段WS可能返回和HTTP相同的返回码。
均可以在网络中传输数据。

不一样点:
WS使用HTTP来创建链接,可是定义了一系列新的header域,这些域在HTTP中并不会使用。
WS的链接不能经过中间人来转发,它必须是一个直接链接。
WS链接创建以后,通讯双方均可以在任什么时候刻向另外一方发送数据。
WS链接创建以后,数据的传输使用帧来传递,再也不须要Request消息。
WS的数据帧有序。
```复制代码
相关文章
相关标签/搜索