WebSocket 和 HTTP异同详解

WebSocket 和 HTTP 是两种在网络通信中广泛使用的协议,它们各自具有独特的特点和适用场景。

一、WebSocket 和 HTTP 的异同

  • 相同点

    • 都基于 TCP 协议:WebSocket 和 HTTP 都建立在 TCP 之上,提供了可靠的、面向连接的通信。

    • 都是应用层协议:它们都在网络协议的应用层上工作,用于在客户端和服务器之间交换数据。

  • 不同点

    • 连接类型:

      • HTTP:通常是无状态的,每次请求都会建立一个新的连接(或重用现有的连接),请求 完成后连接就会关闭(对于 HTTP/1.1 和 HTTP/2,连接可能会被保持一段时间以复用)。
      • WebSocket:是一种持久的连接,一旦建立,就可以在客户端和服务器之间保持打开状态,直到被明确关闭。这使得 WebSocket 非常适合需要实时通信的场景。
    • 数据格式:

      • HTTP:基于请求-响应模型,请求和响应都有固定的格式(如 HTTP 头和正文)。
      • WebSocket:通过帧(Frame)来传输数据,这些帧可以是文本帧或二进制帧,没有像 HTTP 那样的严格格式要求。
    • 使用场景:

      • HTTP:适用于大多数基于网页的应用,特别是那些不需要实时数据更新的应用。HTTP 还广泛用于 API 设计,允许客户端和服务器之间进行数据的交换。
      • WebSocket:非常适合需要实时通信的应用,如在线游戏、实时聊天应用、实时数据推送等。
  • 使用场景

    • HTTP:

      • 网页浏览:用户通过 HTTP 请求获取网页内容。
      • RESTful API:为客户端提供数据接口,允许客户端与服务器之间进行数据的交换。
      • 文件传输:通过 HTTP 协议上传和下载文件。
    • WebSocket:

      • 实时聊天应用:允许用户之间实时发送和接收消息。
      • 在线游戏:保持玩家之间的实时通信,同步游戏状态。
      • 实时数据推送:如股票价格、新闻更新等,服务器可以主动向客户端推送数据。

二、WebSocket握手过程简述:

WebSocket协议建立在HTTP协议之上,用于在单个TCP连接上进行全双工通讯。WebSocket连接的建立始于一个HTTP请求,这个请求被特别地标记为意图“升级”到WebSocket协议。这个HTTP请求和随后的响应过程被称为“握手”。

  • 客户端发起请求:客户端发送一个HTTP请求到服务器,请求中包含了几个特定的头部字段,如Upgrade: websocket、Connection: Upgrade和Sec-WebSocket-Key。这些字段告诉服务器,客户端希望将连接升级到WebSocket协议。

  • 服务器响应:服务器验证客户端的请求后,会返回一个HTTP响应,状态码为101(Switching Protocols),表示协议切换成功。响应中也包含几个特定的头部字段,如Upgrade: websocket、Connection: Upgrade和Sec-WebSocket-Accept。Sec-WebSocket-Accept是一个基于客户端发送的Sec-WebSocket-Key计算得到的值,用于确保响应确实是针对客户端的请求的。

  • 握手完成:一旦服务器返回了包含正确头部字段的101状态码响应,WebSocket握手就完成了,客户端和服务器之间的连接就升级为了WebSocket连接,可以进行全双工通讯了

  • 一个基于Flask和HTML的WebSocket示例https://blog.csdn.net/qq_52011411/article/details/141568379

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值