在 WebSocket 中实现 permessage-deflate

2024-01-09

我在理解和实现 WebSockets 中的 permessage-deflate 扩展时遇到问题。

到目前为止,我已经在握手代码中添加了“Sec-WebSocket-Extensions: permessage-deflate”。似乎一切正常。

但是,当我从服务器 (Node.js) 向客户端 (JS) 发送“TEST”消息时,浏览器(Chrome 和 Firefox)似乎并未解压缩数据本身。

如何使用permessage-deflate扩展正确实现数据压缩和解压缩?

请求标头:

GET ws://localhost/ HTTP/1.1
Host: localhost
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: null
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4
Sec-WebSocket-Key: X3RofjiYbzVR8zUPI5ZI6w==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Protocol: Exodus_101

响应头:

HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
sec-websocket-accept: sFO1Id30BZe63QWcm894hnnb+Pg=
Sec-WebSocket-Protocol: Exodus_101
Sec-WebSocket-Extensions: permessage-deflate

服务器和客户端都压缩有效负载数据部分 使用参数基于每条消息的 WebSocket 数据消息 在开幕握手期间协商

许可放气握手中使用标头来指示连接是否应使用压缩。

  1. 当客户端发送 websocket 请求时,它会发送许可放气如果客户端浏览器支持,则在 websocket 扩展标头中。服务器根据此标头知道客户端是否支持压缩。
  2. 如果服务器决定使用压缩,它会使用类似于 ACK 消息的相同标头进行响应。客户端收到响应后根据服务器的响应决定是否压缩数据。

一旦服务器和客户端都决定使用压缩,它们就必须分别使用 deflate 压缩技术来压缩消息。 即您必须使用以下命令在服务器上启用压缩“每条消息放气”创建 websocket 服务器时的选项。这ws https://github.com/websockets/ws节点模块默认启用此功能。 ws 模块负责处理标头标志,因此您无需隐式设置它。

注:Deflate使用LZ77和Huffman编码的组合来压缩 数据.The客户端最大窗口位; server_max_window_bits=10标头标志用于设置 LZ77 算法使用的自定义缓冲区/“滑动窗口”,以减少内存开销。

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

在 WebSocket 中实现 permessage-deflate 的相关文章

  • 使用 jQuery 更改父元素样式

    我有下一个 html 设置 div class one div class two a href class three Click a div div 我想更改具有类的元素的背景颜色 one当我点击元素时 three使用 jQuery 这
  • 如何向上转型以限制对象属性

    在 JavaScript 中 如何从子类向上转换到超类以自动删除超类中不存在的对象属性 示例 假设有以下 2 个类 class ClassA constructor public a string public b string class
  • 如何在通过 .ajaxForm() 提交表单之前执行一些操作?

    我正在使用 ajaxForm 框架来发送我的数据 而无需重新加载我的页面 ReplayForm ajaxForm success function data alert Success 现在 我想在提交表单之前检查一些条件 如果条件为假 则
  • Angular UI select:从远程服务获取数据

    我正在使用角度用户界面选择 https github com angular ui ui select https github com angular ui ui select 我查看了演示的可用位置这个笨蛋 http plnkr co
  • 使用 Jest 和 React JS TestUtils 测试表单

    我有一个带有 3 个单选按钮的表单 如下所示 假名
  • 如何判断一个网页是否支持jquery?

    确定网页是否启用 jquery 的最佳方法是什么 如果这是确定它的最佳方法 则使用 jquery 本身 if jQuery jquery object exists jQuery 并不神奇 它本质上只是一个大对象 您可以像检查任何其他对象一
  • 在 jQuery .live() 方法中模拟“焦点”和“模糊”

    Update 从 jQuery 1 4 开始 live 现在支持focusin and focusout events jQuery http www jquery com currently1 doesn t support blur o
  • 使用 jQuery Select2 清除下拉菜单

    我正在尝试使用奇妙的方式以编程方式清除下拉菜单Select2 http ivaynberg github com select2 图书馆 使用 Select2 远程 ajax 调用动态填充下拉列表query option HTML
  • 在javascript中访问函数内的实例变量?

    如何以最简单的方式访问函数内的实例变量 function MyObject Instance variables this handler Methods this enableHandler function var button doc
  • 此页面上的脚本导致 ie 运行缓慢

    问题就在标题中 IE 行为异常 并说有一个脚本运行缓慢 FF 和 Chrome 没有这个问题 我怎样才能找到问题所在 那个页面有很多JS 手动检查不是一个好主意 EDIT 这是我正在处理的一个项目的页面 但我需要一个工具来查找问题 End
  • 检测 Google 验证码的挑战窗口何时关闭

    我正在使用谷歌隐形验证码 有没有办法检测挑战窗口何时关闭 我所说的挑战窗口是指您必须选择一些图像进行验证的窗口 目前 我在按钮上放置了一个旋转器 一旦单击按钮 就会呈现验证码挑战 无法向用户提示另一个质询窗口 我以编程方式调用渲染函数 gr
  • 如何将 arraylist 从 servlet 传递到 javascript?

    我通过在属性中设置数组列表并将其转发到 jsp 来从 servlet 传递数组列表 Servlet ArrayList
  • 当我多次调用 requestAnimationFrame 时会发生什么

    我的意思是一次调用多个具有相同功能的 requestAnimationFrame function Draw DoSomething function AFunc prepare something requestAnimationFram
  • 模板中带有 ng-if 的 angularjs 指令

    我正在构建一个在模板内使用 ng if 的指令 奇怪的是 提供给链接函数的元素没有扩展ng if代码 它只是ng if的注释行 经过一番尝试 我发现通过将链接代码包装在 timeout 中似乎可以使其正常工作 但我想知道这是否不是正确的处理
  • webpack中动态加载外部模块失败

    我正在尝试建立以下架构 一个核心 React 应用程序 它具有一些基本功能 并且能够在运行时加载其他 React 组件 这些额外的 React 组件可以按需加载 并且它们在构建核心应用程序时不可用 因此它们不能包含在核心应用程序的捆绑包中
  • 如何为我的整个 Node.js 应用程序使用相同的 MySQL 连接?

    我有一个app js 我从那里运行我的整个应用程序 在 app js 内部 我require许多文件中都有代码 对于每个文件 我都这样做 var mysql require mysql var mclient mysql createCon
  • Javascript 浮点乘以 100 仍然有错误

    我有一个货币字段的文本输入 我在字段中输入 33 91 并在尝试使用 乘以 100 技术时得到以下结果 var curWth parseInt trans withdraw index val 100 3390 var curWth par
  • ThreeJS 中阴影的奇怪行为

    所以我有一个 ThreeJS 场景 并且添加了一些球体 多材质 我还添加了定向光 this light new THREE DirectionalLight 0xFFFFFF 1 this light position set 2 10 2
  • ng-include 和 ng-view 不同时加载

    下面是我的应用程序的结构 很简单 页眉和页脚是非常小的文件 而主页上的 ng view 要大得多 当我进入该页面时 我注意到了这一点 首先加载两个 ng include 然后 ng view 出现 页脚被推到底部 页脚闪烁大约 0 1 秒
  • 确定 Javascript 中的日期相等性

    我需要找出用户在 Javascript 中选择的两个日期是否相同 日期以字符串 xx xx xxxx 形式传递给该函数 这就是我需要的全部粒度 这是我的代码 var valid true var d1 new Date datein val

随机推荐

  • 获取 CSS 属性列表

    你好 有没有办法检查 HTML 元素应用了哪些 CSS 属性 我不需要任何浏览器插件 使用 javascript 我想获取 html 元素上设置的所有 CSS 属性的列表 如果那不可能 我总是可以编写 100 行代码并检查每个 css 属性
  • Django Rest Framework - 更新外键

    我对使用 Django Rest Framework 遇到的这个问题感到有点沮丧 我正在使用一个viewset 有一个custom serializer 这个序列化器有它的depth set to 1 当我查询此视图集时 我得到了正确的数据
  • 调用 free 之前检查 NULL

    许多 C 代码释放指针调用 if p free p 但为什么 我认为 C 标准说的是free给定 NULL 指针 函数不会执行任何操作 那么为什么还要进行另一次显式检查呢 构造 free NULL 在 C 中一直没问题 回到 Dennis
  • 如何避免换行填充?

    我对 HTML 最大的抱怨是换行符在元素之间添加了一点空间 jsFiddle http jsfiddle net SpeTC 这可能会搞乱子元素大小的布局exactly适合他们的父母 我在某处读到 您可以通过使用如下注释来删除这种隐式填充
  • 如何使用 Spring Boot 和 @FeignClient 发送 Bearer 授权令牌

    我正在使用 Spring Boot 编写一个与 HTTP Rest 服务器交互的应用程序 我连接的服务器之一 Wit ai 使用承载者授权令牌 产生成功响应的卷曲请求如下所示 GET message q sample message HTT
  • 在列表框中选择相同的索引

    我正在 asp net 中制作一个网站 我有 2 个列表框 lbxPlayer1 and lbxPlayer2 lbxPlayer1 Items Add bob lbxPlayer1 Items Add jack lbxPlayer1 It
  • pid=`cat $pidfile` 或读取 pid <$pidfile?

    我读了很多init d脚本和 pid cat pidfile 线条让我悲伤 我不明白为什么人们不使用 read pid lt pidfile 最后一个示例使用 POSIX 兼容语法 但不执行fork exec运行外部进程 cat 最后一个解
  • 如何在 ServiceStack 中进行身份验证后重定向

    我已经像这样重写了 CredentialsAuthProvider public override bool TryAuthenticate IServiceBase authService string userName string p
  • git lfs:无法推送

    Uploading LFS objects 98 681 697 8 2 GB 2 3 MB s Uploading LFS objects 98 681 697 8 2 GB 2 3 MB s
  • 正则表达式捕获具有正向回顾的组(python)

    如何将捕获的组与积极的后视结合起来 我想匹配以下示例 DS DS x y Some DS key value Some DS test key value key2 value2 Some DS test key value key2 va
  • React Native:类型错误:未定义不是对象(评估“this.props.navigation.navigate”)

    作为反应原生的初学者 我无法找出代码中的问题 通过在互联网上阅读 我知道我可能遇到一些具有约束力的问题 因此 我的代码从 index js 开始 并在那里注册 App 组件 应用程序组件仅包含堆栈导航路线 它加载 LoginScreen 组
  • 从 R 中的列表中提取数据帧

    我正在尝试从列表 包含来自所有县的数据 中提取各个县作为数据框作为 R 中的单独数据框 我的代码如下 为了说明起见 我正在闯入步骤 1 从 URL 提取数据到列表 这部分效果很好 and 步骤 2 从列表中提取单个 data frames
  • 如何在 React/Jsx 中调用渲染器内的函数

    我想在一些嵌入的 html 中调用一个函数 我尝试了以下操作 但未调用该函数 这是在渲染方法中调用函数的错误方法吗 import React Component PropTypes from react export default cla
  • java内存泄漏,visualvm显示错误数据

    我有一个java应用程序正在运行 几个小时后它就填满了内存 我尝试使用 VisualVM 检测内存泄漏 但它显示错误的数据 不知道这是如何发生的 在屏幕截图中 您可以看到任务管理器显示内存使用量为 700Mb 而 VisualVM 显示内存
  • 如何在 Jaspersoft iReport Designer 4.7 中添加第二页

    您好 我对使用 Jaspersoft iReport Designer 完全陌生 我想要一份两页的报告 我使用的版本是4 7 0 我已经有一页包含信息 但我不知道如何添加第二页 任何帮助将不胜感激 感谢您的时间 您可以通过几种方式来完成此任
  • 定期将Access数据库复制到SQL Server

    我有一个 access 2003 数据库 其中包含我的所有业务数据 该访问数据库在白天每隔几个小时更新一次 我们目前正在编写一个网站 需要使用访问数据库中的数据 该网站 暂时 将有only只读功能 这意味着只需要一种数据传输方式 Acces
  • Linux下的MASM?

    有没有我用的方法MASM http en wikipedia org wiki Microsoft Macro Assembler在Linux下 即使严格的 NASM 在 Linux 下非常流行 它在代码上的某些指令风格仍然有所不同 维基说
  • 如何使用 SQLalchemy 和 Alembic 自动初始化数据库?

    目前 我运行 flask db init flask db migrate m initialization flask db upgrade 如果数据库不存在 我想在 Python 中运行它 例如就像是 app create db 这样我
  • 将从字符串转换的浮点值与文字进行比较

    这不是著名的复制品浮点数学有问题吗 https stackoverflow com questions 588004 is floating point math broken 即使乍一看很像 我正在读一本double从文本文件中使用fsc
  • 在 WebSocket 中实现 permessage-deflate

    我在理解和实现 WebSockets 中的 permessage deflate 扩展时遇到问题 到目前为止 我已经在握手代码中添加了 Sec WebSocket Extensions permessage deflate 似乎一切正常 但