首页 > 其他分享 >websocket协议与http协议

websocket协议与http协议

时间:2024-09-10 15:25:22浏览次数:3  
标签:协议 HTTP WebSocket 请求 响应 http websocket 连接

WebSocket 协议和 HTTP 协议都是用于网络通信的协议,但它们在设计目标、通信方式和应用场景上有一些关键的区别。以下是它们的主要区别:

1. 设计目标

  • HTTP

    • 设计目标:HTTP 旨在为万维网提供一种标准化的请求/响应机制,允许客户端和服务器之间进行数据交换。它是无状态的,每个请求都是独立的。
    • 使用场景:网页浏览、API 调用、文件传输等。
  • WebSocket

    • 设计目标:WebSocket 旨在提供一种在客户端和服务器之间建立持久连接的机制,允许双方进行全双工、低延迟的实时通信。
    • 使用场景:实时应用如在线聊天、实时游戏、金融交易、实时数据流等。

2. 通信模型

  • HTTP

    • 请求/响应模式:客户端发送请求,服务器返回响应,每个请求和响应都是独立的。
    • 无状态:HTTP 本身是无状态的,每个请求与其他请求无关,服务器不会保存客户端的状态。
  • WebSocket

    • 全双工通信:WebSocket 允许双向通信,客户端和服务器可以在建立连接后随时互相发送消息,而无需等待对方的请求。
    • 持久连接:一旦建立,WebSocket 连接将持续存在,直到显式关闭,减少了频繁建立和关闭连接的开销。

3. 连接建立

  • HTTP

    • 短连接:每个请求/响应周期都涉及连接的建立和关闭。虽然可以使用持久连接(HTTP/1.1中的keep-alive),但每个请求还是需要发送新的请求头。
  • WebSocket

    • 升级请求:WebSocket 通过 HTTP 协议进行握手,客户端发起一个 HTTP 请求,要求升级到 WebSocket 连接。如果服务器接受,将返回一个升级响应,完成 WebSocket 连接的建立。
    • 持久连接:一旦建立连接,WebSocket 会话会保持开放状态,可以进行持续的数据交换。

4. 数据传输方式

  • HTTP

    • 数据格式:HTTP 数据传输是基于请求/响应的,每个响应包含状态码和头部信息,数据在每次请求时重新发送。
    • 传输延迟:因为每次请求都需要重新建立连接和发送头部信息,可能会有较高的延迟。
  • WebSocket

    • 消息格式:WebSocket 传输数据是基于消息的,可以发送文本、二进制数据(如 Blob 和 ArrayBuffer),消息头部较小,传输开销低。
    • 低延迟:由于连接是持久的,消息可以即时发送和接收,减少了延迟。

5. 协议开销

  • HTTP

    • 协议头部:HTTP 请求和响应包含较多的头部信息,增加了协议开销。
    • 每次请求都要重头建立:每次请求和响应都需要处理头部和连接建立。
  • WebSocket

    • 协议头部较小:在握手阶段需要少量的协议头部信息,后续的通信只需要很小的开销。
    • 持久连接:数据传输过程中没有额外的开销,只有实际的数据和最小的协议控制信息。

总结

  • HTTP 适用于传统的请求/响应模式的应用,比如网页浏览和简单的数据传输。
  • WebSocket 适用于需要实时双向通信的应用,比如实时聊天、实时数据流和在线游戏。

WebSocket 协议通过建立持久连接和全双工通信,提供了更高效和实时的通信能力,而 HTTP 协议则以其成熟的请求/响应机制适用于更广泛的应用场景。

标签:协议,HTTP,WebSocket,请求,响应,http,websocket,连接
From: https://blog.csdn.net/m0_37714848/article/details/142100249

相关文章

  • Vue+SpringBoot项目 服务器上Nginx反向代理WebSocket
    问题首先说下为什么需要做反向代理websocket,因为我的websocket是部署在后端项目中的,前端是vue部署到服务器后之后配置了ssl,前端页面访问就是带有https的,然而后端地址还是http,这就导致使用ws://url去连接后端服务器会出现以下问题然后将访问方式更改为wss://url进行访问,此时的ur......
  • docker Get "https://registry-1.docker.io/v2/": x509: certificate is valid for
    前言docker在进行build时,报错:Get"https://registry-1.docker.io/v2/":x509:certificateisvalidfor问题原因:Docker客户端无法验证DockerHub服务器的SSL/TLS证书解决在/etc/docker/daemon.json中新增国内镜像源:"registry-mirrors":["https:/......
  • Springboot整合websocket(附详细案例代码)
    文章目录WebSocket简述WebSocket是什么?WebSocket的特点WebSocket的工作流程WebSocket的消息(帧)格式WebSocket与HTTPspringboot中整合WebSocketpom依赖实体类配置类握手配置类WebSocket配置类自定义异常类webSocket服务类websocket中Session的getBasicRemote()和......
  • HTTPS证书如何申请?只需这五个步骤
    在当今互联网+时代,保护用户的敏感数据和隐私变得越来越重要,HTTPS证书可以加密传输数据,有效保护传输数据安全,消除浏览器不安全提示,增加网站的安全性和可信性,由此个人或企业网站都建议部署HTTPS证书。那么我们应该如何申请HTTPS证书呢?在本文中,我们将向您介绍5个简单的步骤,让您轻......
  • 计算机网络基础(IP与协议)
    IP地址与Mac地址的含义与用途首先说一下为什么要学计算机网络部分的知识:        在这个世界上的电子设备有很多,比如说:手机、电脑、平板、电视机等等,我们可以发现,电脑之间可以发送文件,手机可以控制电视机播放什么影片,电脑也可以共享到电视机上影片。那么他们是如何通......
  • shell 请求http get api,获取返回值
    在Shell脚本中,你可以使用curl或wget来发送HTTPGET请求并获取返回值。以下是使用curl的示例:#!/bin/bash#APIURL无参数时:URL="http://example.com/api/data"#APIURL有参数时:id=119URL="http://example.com/api/data?id="+${id}#发送GET请求并存储响应response=$(cu......
  • 计算机网络之TCP/IP协议简介
    TCP/IP协议简介首先TCP/IP协议不只是表示TCP协议和IP协议两种协议,而是一个协议簇。协议簇是什么并不难理解,就是字面意思,一个由多个协议组合而成的集合体,其中最有代表性的就是TCP和IP这两个协议,除了这两个还有我们熟知的FTP、UDP等协议。当然我们下面主要介绍的还是这两位主角TCP......
  • 在 Qt5 中创建一个 HTTP 接口以返回屏幕截图
    在Qt5中创建一个HTTP接口以返回MainWindow的屏幕截图在Qt5中,可以通过使用QTcpServer和QTcpSocket来创建一个简单的HTTP服务器。通过这种方式,我们可以实现一个HTTP接口,当访问该接口时,会返回当前MainWindow窗口的屏幕截图。以下是实现这一功能的详细步骤与相关知......
  • 一文讲清,常用通信协议IIC,SPI,串口,基于STM32
    目录一、通讯的基本概念1.串行通讯2.并行通讯3.传输模式(单工、半双工、全双工)二、常见通讯协议(串口、IIC、SPI)1.串口(1)UART和USART的区别是什么?(2)UART(TTL、RS232、RS485)(3)基于STM32的HAL库的串口配置2.IIC(1)物理层(2)协议层(3)软件模拟IIC通讯代码(4)有关IIC面试的问题(5)硬......
  • SpringBoot异步任务获取HttpServletRequest
    在SpringBoot应用中,异步任务的实现通常通过 @Async注解来实现,它允许我们在后台线程中执行方法,从而提高了应用的性能和响应速度。然而,当我们在异步任务中需要访问 HttpServletRequest对象时,我们会遇到一些挑战,因为 HttpServletRequest是线程绑定的,而异步任务是在不同的线程......