捋一捋http、https、http2、WebSocket、SSE之间的关系

注:本文不涉及具体的概念,只探究他们之间的关系

  • http:目前绝大多数是http1.1版本,最原始的web协议,默认80端口,基于TCP协议。
  • https:加密的http协议,默认443端口,基于TCP协议。
  • http2:第二代http协议,相较于HTTP1.x,大幅度的提升了web性能。在与HTTP/1.1完全语义兼容的基础上,进一步减少了网络延迟和传输的安全性,基于TCP。
  • websocket:服务端推送,实现服务端客户端全双工通信,基于TCP。

以上http,websocket都属于应用层协议,tcp属于传输层协议。
TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。
详情:TCP/IP、Http、Socket的区别

实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,就像上面所说,它只是提供了一个针对TCP或者UDP编程的接口。

HTTP2.0可以说是SPDY的升级版(基于SPDY设计的),但是依然存在一些不同点:

  1. HTTP2.0支持明文传输,而SPDY强制使用HTTPS;
  2. HTTP2.0消息头的压缩算法采用HPACK,而非SPDY采用的DEFLATE。

异同:
HTTP协议为单向协议,即浏览器只能向服务器请求资源,服务器才能将数据传送给浏览器,而服务器不能主动向浏览器传递数据。分为长连接和短连接,短连接是每次http请求时都需要三次握手才能发送自己的请求,每个request对应一个response;长连接是短时间内保持连接,保持TCP不断开,指的是TCP连接。

WebSocketSSE都是HTML5带来的新变化~

针对这方面,我觉得这句话总结的很好:

“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”

WebSocket

WebSocket是HTML5中的协议,支持持久连接;

首先HTMl5指的是一系列新的API,或者说新规范,新技术。WebSocket是HTML5中新协议、新API;

但是WebSocket是由http先发起的,然后再转为websocket连接;

总结:

总得来说,在HTML5规范下,最推荐使用ServerSent和WebSocket的方式进行服务器消息的推送。

对比这两种方式:

  1. ServerSent的方式,可以使服务端的开发依然依用以前的方式,但是其工作方式与Comet类似。
  2. 而WebSocket的方式,则对服务端的开发有着较高的要求,但其工作方式是完全的推送。

我本人其实挺偏向WebSocket + MQ的工作方式,但是对于老项目的翻新,还是用SeverSent比较好

相关链接:

HTTP协议&SOCKET协议

展开阅读全文

没有更多推荐了,返回首页