WebSocked、SSE、http1.0、http1.1和http2.0之间的关系

2023-10-27

1、WebSocked是个啥?

首先,WebSocked是html5搞出来的一种新的协议,所以和http没有什么联系,要说非要有联系就是他借用了http协议来完成一部分的握手,但它和http一样都是一种连接协议,建立在tcp协议之上,使用在应用层。

那么我们已经有了http协议为什么还要WebSocked呢?

因为WebSocked有一个最大的特点,就是服务器可以主动向客户端推送信息。而http协议只能做到客户端向服务器推送信息。

很多网站为了实现推送技术,所用的技术都是 Ajax 轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。

那么就很容易造成以下问题:
客户端:“有消息的话你叫我”
服务端:“好的”
//时间过了1s
客户端:“有消息了吗”
服务端:“没有”
//时间过了1s
客户端:“有消息了吗”
服务端:“没有”
//时间过了1s
客户端:“有消息了吗”
服务端:“没有”
//时间过了1s
客户端:“有消息了吗”
服务端:“。。。。”

这样的轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。

当使用了websocked就会好很多
客户端:“有消息的话你叫我”
服务端:“好的”
服务端:“来消息了”
服务端:“来消息了”

2、WebSocked、SSE、http1.0、http1.1和http2.0的区别

SSE:服务器发送事件(Server-Sent Events),也是html5的推出的一种协议,仅单工通讯,通俗解释起来就是一种基于HTTP的,以流的形式由服务端持续向客户端发送数据的技术。优点是简单与传统的http协议几乎无差别。

websocked是一种持久连接协议,而http是不支持持久性连接的。

wecsocked是双工通信,SSE仅支持单工通信,建立连接后,只能由服务端发往客户端,且占用一个连接,如需客户端向服务端通信,需额外打开一个连接。

http1.0/1.1只能由客户端向服务器端发送数据,而websocked可以由服务器向客户端发送数据。

http1.0的生命周期为一个request,一个response,这样就结束了。

http1.1有了改进,有一个keep-alive,也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response。但是请记住 Request = Response, 在HTTP中永远是这样,也就是说一个request只能有一个response。而且这个response也是被动的,不能主动发起。

http/2.0提升了访问速度,允许多路复用:允许同时通过单一的连接发送多重请求-响应信息,二进制分帧:将传输的信息分割为更小的信息,并进行二进制编码,首部压缩,服务端推送。

3、WebSocked的实现

GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: http://example.com

Upgrade: websocket
Connection: Upgrade
就是告诉服务器自己发起的是websocked协议

Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
就是一系列的验证了

参考文献:https://www.cnblogs.com/fuqiang88/p/5956363.html
http://www.ruanyifeng.com/blog/2017/05/websocket.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WebSocked、SSE、http1.0、http1.1和http2.0之间的关系 的相关文章

  • 带 cookie 身份验证的 Gorilla websocket

    这是我的设置 我正在构建一个带有用户登录的服务 使用 Negroni 和 Gorilla 登录后 用户会获得一个会话 cookie 服务器使用该会话 cookie 来授权受保护的端点 受保护的端点之一允许用户 客户端与服务器打开 Webso
  • WebSockets 监听 UNIX 域套接字?

    是否可以在 nginx 服务器后面设置一个 WebSockets 服务器来处理 UNIX 域套接字上的连接 我目前在同一台计算机上有多个 WebSocket 服务器实例 并且存在端口共享问题 所有实例都必须分配一个唯一的端口 我想避免这种情
  • 通过 Websockets 进行 WebRTC 视频聊天

    我正在尝试使用 webRTC 和 WebSockets 进行信号发送来开发视频聊天应用程序 我的问题是 我不知道创建 RTCPeerConnection 并通过 webSocket 连接两个对等点 2 个浏览器 的过程是什么 至少在本地 我
  • 使用单个“proxyServer”将 Websocket 代理到多个目标

    我正在开发一个nodeJS websocket代理服务器 用例是当 websocket 请求到来时 我将检查其凭据 添加新标头 然后根据其组 来自用户 ID 将 websocket 连接重定向到其目标 webscoket 服务器 我发现大多
  • 如何终止 Websocket 连接?

    如何终止 Websocket 连接 我不是在谈论关闭两端的连接 而是在 中间 中断它 我需要测试重新连接时必须发生的一些应用程序逻辑 通过 SocketIO 处理 不 拔掉网络电缆不算数 因为我无法在单元测试中真正实现自动化 此外 我希望只
  • 通过 PHP 连接到 socket.io(nodejs)

    我需要通过 php 连接到 websocket 发送数据并立即断开连接 无需等待套接字的响应 我用了大象io http elephant io 但更新库后不起作用 请告诉我如何通过 PHP 连接到 websocket 我也遇到了这个问题 学
  • Jetty、websocket、java.lang.RuntimeException:无法加载平台配置器

    我尝试在 Endpoint 中获取 http 会话 我遵循了这个建议https stackoverflow com a 17994303 https stackoverflow com a 17994303 这就是我这样做的原因 publi
  • 由 Servlet 容器提供服务的 WebSocket

    上周我研究了 WebSockets 并对如何使用 Java Servlet API 实现服务器端进行了一些思考 我没有花费太多时间 但在使用 Tomcat 进行一些测试时遇到了以下问题 如果不修补容器或至少对 HttpServletResp
  • WebSocket 和 Origin 标头字段

    以下引用自 RFC6455 WebSocket 协议 不打算处理来自任何网页的输入但 仅对于某些站点应验证 Origin 场是原点 他们期望 如果服务器不接受指示的来源 那么它应该用回复来响应 WebSocket 握手 包含 HTTP 40
  • 如何使用 POCO 发送 websocket PONG 响应

    我正在尝试使用 POCO 1 7 5 设置 websocket 服务器 POCO的样本发现here https github com pocoproject poco blob develop Net samples WebSocketSe
  • 消息队列与套接字

    我没有太多的套接字编程经验 但我尝试阅读一些相关内容 我对 MDB 和消息队列非常熟悉 有人告诉我队列 例如 MDB 只不过是直接套接字连接 有人可以帮我比较一下这两个吗 两者是无与伦比的 因为它们代表不同的layers 这就像将关系数据库
  • websockets 如何处理同一浏览器的两个选项卡

    I have 1 个 PHP 服务器 提供 http 请求 和 1 node js 发布更新的数据消息 每个连接都带有 websocket php 服务器设置其 cookie 在一个浏览器中 此 cookie 可在所有选项卡中使用 当浏览器
  • Mosquitto Broker 服务拒绝在 Websocket 上启动

    我正在尝试启动 Eclipse Mosquitto 代理服务来监听 websockets 添加 listener 8083 protocol websockets 在 mosquitto conf 如果我只使用listener 8083 服
  • 带有服务总线的 SignalR Azure 云服务

    我使用 SignalR 构建了一个简单的聊天应用程序那里有教程 http www asp net signalr overview getting started tutorial getting started with signalr
  • 如何在单独的文件中使用 FastAPI Depends 作为端点/路由?

    我在单独的文件中定义了一个 Websocket 端点 例如 from starlette endpoints import WebSocketEndpoint from connection service import Connectio
  • 防止 NGINX 中的一个 WebSocket 连接泛滥?

    我使用这个配置来防止我的服务器上出现类似 DOS 的洪水 limit req zone binary remote addr zone one 10m rate 10r s limit req zone binary remote addr
  • IP 地址 v4/v6 等效性测试

    是否可以在使用 IPv4 和 IPv6 的双栈环境中测试 IP 地址的等效性 如果是这样 怎么办 我的应用程序使用网络套接字 https github com zaphoyd websocketpp在 Boost ASIO 之上 举个例子
  • 为什么 websocket 需要使用 HTTP 进行打开握手?为什么不能成为一个独立的协议呢?

    Websocket 的设计方式是 通过使其握手成为有效的 HTTP 升级请求 其服务器可以与 HTTP 服务器共享端口 我对这个设计理念存有疑问 无论如何 WebSocket 协议都是一个独立的基于 TCP 的协议 为什么我们需要这个 HT
  • 如何从 Spring 4 stomp websocket 方法获取/设置主体和会话属性

    我正在做实验Spring 4 websocket 和 stomp http docs spring io spring docs 4 0 x spring framework reference htmlsingle websocket s
  • R 中的 Websocket

    我设法在 R 中建立到 Mtgox websocket 的连接 规格如下 url https socketio mtgox com mtgox Currency USD https socketio mtgox com mtgox Curr

随机推荐

  • 鼎信通讯提前批主管面凉经(已收到感谢信)

    1 介绍自己 2我提到3D打印 问怎么编程 3 怎么证明自己可以适应工作 4 贪心算法
  • Python-异常处理try(一)

    平时在做自动化测试的时候 脚本里面会经常用到try和except 但是感觉好像对try的用法理解的不是很透彻 今天在这里重新学习下 也分享给大家 大家看一下 try 和 except 的工作原理 try 可能发生异常的代码 lt 语句 gt
  • Backtrader解决多股回测时跳过日期的问题

    股票的上市日期各不相同 有些也退市了 在回测时 Backtrader会遍历所有的数据 选择有效期的交集开始执行next 这时我们的选股策略就会因为数据的问题出现一段时间的空窗期 所以我们不要用next 来执行 而是用prenext 来执行
  • LaTex中对\begin{itemize}或\begin{enumerate}中的各项新的段落增加缩进

    转自 How to indent a new paragraph within items 解决方案 在前序部分 在 begin document 前 加入如下代码块 usepackage enumitem setlist enumerat
  • 设备驱动框架简介

    1 API 1 register chrdev region dev t from unsinged count const char name 2 cdev init struct cdev struct file operations
  • 跨平台客户端Socket 一 数据包定义

    最近网上查找资料并结合很久以前pc游戏中使用的tcp ip代码 整理出cocos2d x 跨平台的客户端网络模块 目前数据包仍是以前的字节码数据形式 后续会修改使用protobuff的数据交换方式 注 代码未测试 先将内容记录下来 Glob
  • Android Studio代码调试大全

    http blog csdn net dd864140130 article details 51560664 Android Studio目前已经成为开发Android的主要工具 用熟了可谓相当顺手 作为开发者 调试并发现bug 进而解决
  • 逆向爬虫17 Scrapy中间件

    逆向爬虫17 Scrapy中间件 在学习Scrapy之前 我们已经学了很多伪装防反爬的爬虫技术 目标 如何在Scrapy框架中也使用这些技术呢 这是本节要讨论的问题 本节要讨论的防反爬技术有 处理登录Cookies 处理UA 处理代理IP
  • css文本超出宽带自动换行

    css文本超出宽带自动换行 样式word wrap break word 效果 样式word wrap break word
  • Minio Browser

    Minio Browser Minio Browser使用Json Web Token来验证JSON RPC请求 初使请求为用户提供的AccessKey和SecretKey生成一个token令牌 目前这些令牌在10小时后到期 这是不可配置的
  • Apisix使用教程

    安装 推荐直接使用Docker来安装启动Apisix 安装docker 首先下载并安装docker https www docker com 下载之后 直接运行安装 安装后打开Docker Desktop 等它启动完 启动完之后 此时就是可
  • 图灵奖得主Judea Pearl:人工智能是如何走出死胡同的?

    作者 Judea Pearl Danna Mackenzie 编辑 Natalie AI 前线导读 人工智能研究专家 Judea Pearl 及其同事领导的因果关系革命突破多年的迷雾 厘清了知识的本质 确立了因果关系研究在科学探索中的核心地
  • 不同视角下的存储协议栈

    复杂度3 5 机密度3 5 最后更新2021 05 03 我们把AIX的存储协议栈归纳一下 从两个不同视角来观察 以AIX驱动实现视角 主要是文件系统驱动程序 被称为内核扩展可能更恰当 不过具体叫什么并不重要 LVM驱动程序 磁盘设备驱动程
  • Java小白一个,可以直接学习SpringBoot来做毕设吗?

    个人建议不要跳过SSM 很多人想要跳过SSM直接上手SpringBoot 但是SpringBoot中自动化配置 条件注解 Java配置等东西都基于Spring的 Java配置是Spring3开始提供的 条件注解也是Spring中的内容 很多
  • AGV轨迹matlab仿真,两轮差速AGV的轨迹跟踪控制研究 Study on Trajectory Tracking Control of Two-Wheel Difference Speed of...

    Software Engineering and Applications Vol 06 No 04 2017 Article ID 21608 9 pages 10 12677 SEA 2017 64007 Study on Trajec
  • QT学习14:QtXlsx操作Excel表

    一 前言 操作excel方式有 QAxObject 和QtXlsx 区别 Qt自带的QAxObject库操作excel的前提是电脑已经安装微软的Office 包含EXCEL 而QtXlsx可以直接使用免装Office且操作更简单 二 QtX
  • CNZZ埋点及点击量统计方法

    1 引入cnzz统计代码 document write unescape 3Cspan id 你的cnzzID 3E 3C span 3E 3Cscript src https s9 cnzz com z stat php 3Fid 3D1
  • Irrlicht引擎Shader渲染的BUG

    修改2 丢人了 回头一看原来的理解还是不够完整 如果在视图空间计算光照等 一般都会将法线变换到视图空间 想当然的做法是用视图矩阵来变换法线 这么做只有在物体没有缩放或是一致性缩放的情况下才是正确的 若是物体有非一致性缩放 uniform s
  • Python多版本管理工具--pyenv

    我们在平时的项目开发或者学习中 有可能使用不同的Python版本 大家都知道Python的版本非常多 如果我们把需要的不同版本的Python都下载到服务器上 管理起来会非常困难 多版本并存又容易互相干扰 搞不好整个服务器的Python环境会
  • WebSocked、SSE、http1.0、http1.1和http2.0之间的关系

    1 WebSocked是个啥 首先 WebSocked是html5搞出来的一种新的协议 所以和http没有什么联系 要说非要有联系就是他借用了http协议来完成一部分的握手 但它和http一样都是一种连接协议 建立在tcp协议之上 使用在应