这两个协议我都用到过,从没对比过,今天就来对比一下这两个协议。
HTTP
什么是HTTP?
HTTP,英文:HyperText Transfer Protocol。中文:超文本传输协议。
特点:
- 基于TCP协议。
- 无状态的。
我们来简单的解释一下什么叫无状态?
每次请求之间没有任何联系,也就是服务器不知道每次请求是否是同一个用户。
为什么HTTP要设计成无状态协议?
那就要看他有什么优点:
- 首先减少服务器压力,解放了服务器,每一个请求不会造成不必要的连接占用。
- 由于每个请求无关联,如果第一个请求报错,后面的依然会继续。
可是还会出现缺点:
- 每次请求会造成不必要的大量重复内容信息。
怎么解决这种无状态?
Cookie、Session解决HTTP无状态带来的问题。
HTTP/1.1默认是长连接(keep-alive)
长连接的意思就是,在一定时间内保持TCP连接,不断开的进行数据请求。
关于这部分请看我之前的文章:《TCP和HTTP请求之间的关系》
WebSocket
WebSocket协议是H5出的,他和HTTP不能说一点关系没有,应该说是交集关系。
HTTP是不支持持久连接的,而WebSocket解决了这样的问题。
特点:
-
WebSocket建立在TCP协议之上。
-
与HTTP有良好的兼容性(有交集)。比如:默认端口也是80和443,并且握手阶段采用的是HTTP协议。
-
持久化,也是对比HTTP来说。
-
WebSocket没有同源限制,客户端可以与任意服务器通信。
原理:
-
基于HTTP协议来完成一部分握手。
-
请求头如下:
-
Upgrade: websocket Connection: Upgrade Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits Sec-WebSocket-Key: mg8LvEqrB2vLpyCNnCJV3Q== Sec-WebSocket-Version: 13
-
Upgrade 和 Connection 通知服务器,浏览器端发起的是WebSocket协议。
-
Sec-WebSocket-Extensions:表示客户端想要的协议级的扩展。
-
Sec-WebSocket-Key:由浏览器随机生成的Base64编码值。
-
Sec-WebSocket-Version:表明客户端使用协议的版本。
-
请求头的作用就是用来通知服务端,将协议改为WebSocket。并且使用Sec-WebSocket-Key进行确认。
-
响应头如下:
-
Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: AYtwtwampsFjE0lu3kFQrmOCzLQ=
-
通知浏览器已经改写成功了。
-
Sec-WebSocket-Accept:由服务端加密返回的Base64编码值。
总结:
简单的介绍了HTTP和WebSocket,后续如有更细,依然会补充在这里。