http协议和websocket协议的区别

HTTP

HTTP 是一种 超文本传输协议(Hypertext Transfer Protocol),可以进行文字分割:超文本(Hypertext)、传输(Transfer)、协议(Protocol),它们之间的关系如下

img

按照范围的大小 协议 > 传输 > 超文本。下面就分别对这三个名次做一个解释。

什么是超文本

在互联网早期的时候,我们输入的信息只能保存在本地,无法和其他电脑进行交互。我们保存的信息通常都以文本即简单字符的形式存在,文本是一种能够被计算机解析的有意义的二进制数据包。而随着互联网的高速发展,两台电脑之间能够进行数据的传输后,人们不满足只能在两台电脑之间传输文字,还想要传输图片、音频、视频,甚至点击文字或图片能够进行超链接的跳转,那么文本的语义就被扩大了,这种语义扩大后的文本就被称为超文本(Hypertext)。

什么是传输

那么我们上面说到,两台计算机之间会形成互联关系进行通信,我们存储的超文本会被解析成为二进制数据包,由传输载体(例如同轴电缆,电话线,光缆)负责把二进制数据包由计算机终端传输到另一个终端的过程(对终端的详细解释可以参考 你说你懂互联网,那这些你知道么?这篇文章)称为传输(transfer)。

通常我们把传输数据包的一方称为请求方,把接到二进制数据包的一方称为应答方。请求方和应答方可以进行互换,请求方也可以作为应答方接受数据,应答方也可以作为请求方请求数据,它们之间的关系如下

img

如图所示,A 和 B 是两个不同的端系统,它们之间可以作为信息交换的载体存在,刚开始的时候是 A 作为请求方请求与 B 交换信息,B 作为响应的一方提供信息;随着时间的推移,B 也可以作为请求方请求 A 交换信息,那么 A 也可以作为响应方响应 B 请求的信息。

什么是协议

协议这个名词不仅局限于互联网范畴,也体现在日常生活中,比如情侣双方约定好在哪个地点吃饭,这个约定也是一种协议,比如你应聘成功了,企业会和你签订劳动合同,这种双方的雇佣关系也是一种 协议。注意自己一个人对自己的约定不能成为协议,协议的前提条件必须是多人约定。

那么网络协议是什么呢?

网络协议就是网络中(包括互联网)传递、管理信息的一些规范。如同人与人之间相互交流是需要遵循一定的规矩一样,计算机之间的相互通信需要共同遵守一定的规则,这些规则就称为网络协议。

没有网络协议的互联网是混乱的,就和人类社会一样,人不能想怎么样就怎么样,你的行为约束是受到法律的约束的;那么互联网中的端系统也不能自己想发什么发什么,也是需要受到通信协议约束的。

什么是HTTP

那么我们就可以总结一下,什么是 HTTP?可以用下面这个经典的总结回答一下: HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范

HTTP 的优点和缺点

HTTP 的优点

简单灵活易扩展

HTTP 最重要也是最突出的优点是 简单、灵活、易于扩展。

HTTP 的协议比较简单,它的主要组成就是 header + body,头部信息也是简单的文本格式,而且 HTTP 的请求报文根据英文也能猜出来个大概的意思,降低学习门槛,能够让更多的人研究和开发 HTTP 应用。

所以,在简单的基础上,HTTP 协议又多了灵活 和 易扩展 的优点。

HTTP 协议里的请求方法、URI、状态码、原因短语、头字段等每一个核心组成要素都没有被制定死,允许开发者任意定制、扩充或解释,给予了浏览器和服务器最大程度的信任和自由。

应用广泛、环境成熟

因为过于简单,普及,因此应用很广泛。因为 HTTP 协议本身不属于一种语言,它并不限定某种编程语言或者操作系统,所以天然具有跨语言、跨平台的优越性。而且,因为本身的简单特性很容易实现,所以几乎所有的编程语言都有 HTTP 调用库和外围的开发测试工具。

随着移动互联网的发展, HTTP 的触角已经延伸到了世界的每一个角落,从简单的 Web 页面到复杂的 JSON、XML 数据,从台式机上的浏览器到手机上的各种 APP、新闻、论坛、购物、手机游戏,你很难找到一个没有使用 HTTP 的地方。

无状态

无状态其实既是优点又是缺点。因为服务器没有记忆能力,所以就不需要额外的资源来记录状态信息,不仅实现上会简单一些,而且还能减轻服务器的负担,能够把更多的 CPU 和内存用来对外提供服务。

HTTP 的缺点

无状态

既然服务器没有记忆能力,它就无法支持需要连续多个步骤的事务操作。每次都得问一遍身份信息,不仅麻烦,而且还增加了不必要的数据传输量。由此出现了 Cookie 技术。

明文

HTTP 协议里还有一把优缺点一体的双刃剑,就是明文传输。明文意思就是协议里的报文(准确地说是 header 部分)不使用二进制数据,而是用简单可阅读的文本形式。

对比 TCP、UDP 这样的二进制协议,它的优点显而易见,不需要借助任何外部工具,用浏览器、Wireshark 或者 tcpdump 抓包后,直接用肉眼就可以很容易地查看或者修改,为我们的开发调试工作带来极大的便利。

当然缺点也是显而易见的,就是不安全,可以被监听和被窥探。因为无法判断通信双方的身份,不能判断报文是否被更改过。

性能

HTTP 的性能不算差,但不完全适应现在的互联网,还有很大的提升空间。

什么是websocket

WebSocket 是一种基于 TCP 的全双工通信协议,支持客户端和服务器之间实时的双向通信。它可以在单个 TCP 连接上提供持久化的连接,允许客户端和服务器之间进行实时数据传输和推送,并且不需要客户端发起请求即可接受服务器推送的数据。

websocket的原理

握手过程

  • 客户端发送一个 HTTP 请求,请求头中包含了 Upgrade 和 Connection 两个字段,表示要升级协议到 WebSocket,并保持长连接。
  • 服务器返回一个 HTTP 响应,响应头中包含了 Upgrade 和 Connection 两个字段,表示同意升级协议到 WebSocket,并保持长连接。
  • 握手成功后,客户端和服务器都可以通过 WebSocket 协议进行数据传输。

双向通信

  • WebSocket 协议是全双工通信协议,客户端和服务器之间可以进行实时的双向通信。
  • 客户端可以发送消息给服务器,服务器也可以主动推送消息给客户端,而无需等待客户端的请求。

数据传输

  • WebSocket 协议可以传输任意类型的数据,包括文本、二进制数据等。
  • 客户端和服务器之间可以通过 send() 方法来发送数据,通过 onmessage() 方法来接收数据。

持久连接

  • WebSocket 的连接是长期保持的,客户端和服务器之间可以保持连接状态。
  • 连接一旦建立成功,客户端和服务器之间可以随时发送和接收数据。

安全性

  • WebSocket 支持加密传输,可以使用 SSL/TLS 协议来保证数据的安全性。

websocket与http的区别

img

连接方式

  • HTTP:HTTP 是一种无状态的协议,每次请求都需要建立一个新的连接,并在请求完成后立即关闭连接。
  • WebSocket:WebSocket 是一种基于 TCP 的全双工通信协议,它支持长期的双向通信通道,客户端和服务器之间可以保持连接状态。

数据传输方式

  • HTTP:HTTP 协议是通过请求-响应模式来传输数据,客户端发送请求,服务器返回响应。每次请求和响应都是独立的。
  • WebSocket:WebSocket 协议允许在客户端和服务器之间进行实时的双向数据传输,服务器可以主动推送数据给客户端,而不需要客户端发起请求。

基于内容和消息类型

  • HTTP:HTTP 协议主要用于传输静态内容,如 HTML、CSS、JavaScript、图片等。它支持不同的方法(GET、POST、PUT、DELETE 等)来操作和获取资源。
  • WebSocket:WebSocket 协议更适合传输实时数据和消息,如聊天应用、实时更新、游戏等。它通过消息的方式进行通信。

握手过程

  • HTTP:HTTP 协议需要进行一次握手(request-response)来建立连接,每次请求都需要重新握手。
  • WebSocket:WebSocket 协议在建立连接时需要进行一次握手,之后连接保持打开状态,可以持续传输数据。

总的来说,HTTP 协议适用于传输静态内容和短期的请求-响应模式,而 WebSocket 协议适用于实时双向通信和长期连接。选择使用哪种协议取决于您的应用需求和场景。

参考链接

http://t.csdnimg.cn/7OVP7
http://t.csdnimg.cn/JcUac

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值