打印通讯错误怎么办(一次 HTTP2 通信失败的原因分析)
Posted
篇首语:我要做的绝不止此。我不是寻求者。我要为自己创造一个属于自己的太阳!本文由小常识网(cha138.com)小编为大家整理,主要介绍了打印通讯错误怎么办(一次 HTTP2 通信失败的原因分析)相关的知识,希望对你有一定的参考价值。
打印通讯错误怎么办(一次 HTTP2 通信失败的原因分析)
背景
某业务上线 HTTP/2 以后,通过 curl 访问某接口一直失败。
开发人员怀疑可能是运维的 HTTP/2 配置不当导致访问失败,但是同样是配置 HTTP/2 的其它域名却是正常的,于是来一起看了一下这个问题。
排查
排查第一步:遇事不决先抓包,在没有任何先决信息的情况下,先抓包,看看传输了一些啥。因为 HTTP/2 要求通过 HTTPS 通信,所以这里抓包,还需要用到 wireshark 抓取 HTTPS 包的一些技巧。至于这么做,我在之前的 B 站分享有讲过,大家如果感兴趣可以看看。地址在这里:Wireshark 抓取 HTTPS 流量的 N 种方法「 www.bilibili.com/video/BV1ur… 」
抓取 HTTPS 的包
简单来说,就是通过导出 premaster-secret 来帮助 wireshark 解密数据。wireshark ssl keylog 格式长啥样,具体的定义在 github.com/boundary/wi…
curl 要做的就是把 key 打印到文件里,这部分的源码在: github.com/curl/ lib/vtls/keylog.c ,如下图所示。
对于 curl 而言,我们只需要指定一个环境变量就可以了,抓取的包我们就可以解密出来了。
export SSLKEYLOGFILE=/Users/arthur/keylog.txt
wireshark 解密出来的结果如下。
看起来就是 HTTP2 服务端的问题发了一个错误的包导致客户端回了 rst 帧。
接下来继续看 HTTP/2 服务端回复了什么。通过查看包,果然发现了一些有意思的。
expires 头部后面多了一个空格,其它的 header 都没有。怀疑是这个导致的,通过跟业务确认,确实如此,expires 后面多了一个空格,去掉以后马上访问正常了。
在 HTTP/1.1 时代,curl 是合法的,没有问题,在 HTTP/2 中,这里就有问题了。
当然这依然不能直接证明就是这个原因,除非 curl 亲自告诉我。
进一步分析
为什么有空格会出现问题呢?当然要从 curl 的底层去分析,curl 的 HTTP/2 底层是用 nghttp 这个库来实现的,nghttp 本来也可以通过命令行直接发起请求。
使用 nghttp 访问一下,印证了我们的想法。
探究源码
nghttp 是一个开源项目,可以很方面的把源码 clone 下来编译本地调试,发现他在处理 header 的时候会判定 header 是否合法
合法非法的 ASCII 字符在这里定义
可以看到空格,也就是下图中的 SPC,ASCII 码值是:32(0x20),对应的 VALID 为 0,表示空格是非法的 header 字符。
通过 GDB 同步确认这一点
至此,我们就知道了为什么 curl 在处理带有空格头部时的问题,chrome、safari 也有类似的问题,大家感兴趣可以看看。
作者:挖坑的张师傅
链接:https://juejin.cn/post/7072530260968865805
来源:稀土掘金
相关参考
条码打印机双条码(Siemens TIA使用OPC UA完成2台PLC通讯)
在这篇文章中,通过将S7-1500设置为具有专用服务器接口和用户身份验证的OPCUA服务器来学习如何使用OPCUA在两个PLC之间进行通信。OPCUA是用于工业通信的开放式数据交换标准。它描述了一种用于从机器到机器或从机器到PC交换数据...
无尘布分条横切机(记失败的鳌太穿越——业余无线电在户外安全中的应用一例)
...定7月中旬需要到西安走一趟,商量着一家子都去,作为一次家庭旅行。一闪念,何不趁此机会将鳌太穿越捎带办了?同老婆敲定一下行程细节,就这么决定了。署天连日的烦闷一扫而空,跳将起来,开始筹备
条码扫描枪如果扫描正常,但是数据输出不准确。出现这种情况一般是电缆连接线松动,扫描枪上的键盘输入模式设置错误,无线通讯设置错误等造成。解决方法非常简单,只需断开电缆进行重新连接就行,如果是输入设置错误...
标签条码打印缺陷在线检测系统,也叫标签质量检测系统,或条码打印检测一体机,是通过边打印边检测,把重码、错码、漏码、缺陷标签筛选出来,与标签打印机“融为一体“,以“机器视觉算法”为核心的一款软硬件集成系...
爱普生大幅面打印机清零(L3158变了型号ET-2700,L4165升级失败变了型号ET-2700解决)
...700解决。出厂编号出厂编号正在刷机还原。请不要随便关打印机机。。根据电脑和网速不一样需时可能5-10分钟左右的样子,听我通知。L3158变了型号ET-2700,L4165升级失败变了型号ET-2700解决最近使用爱普生L4168L4158L系列打印机出现...
爱普生大幅面打印机清零(L3158变了型号ET-2700,L4165升级失败变了型号ET-2700解决)
...700解决。出厂编号出厂编号正在刷机还原。请不要随便关打印机机。。根据电脑和网速不一样需时可能5-10分钟左右的样子,听我通知。L3158变了型号ET-2700,L4165升级失败变了型号ET-2700解决最近使用爱普生L4168L4158L系列打印机出现...
施乐复印机清代码(施乐B200系列打印设备常见错误代码解决方案)
打印机显示错误代码,却不知何意?指示灯常亮或不停闪烁,却找不到原因?关于日常出现的这些令人头大的打印问题,本次旗捷将以施乐B200系列打印机为例,给大家提供常见错误代码对应的解决方案。错误代码09-100碳粉盒接...
机卡通讯错误太多(手机号“一键解绑”无法使用?官方:仅对受邀用户测试 尚未正式推出)
6月8日,工信部直属科研事业单位中国信息通信研究院上线了手机号“一键查询”与“一键解绑”服务,可以查询手机号注册的互联网账户情况,并提供微博、淘宝、抖音和美团等解绑服务。该服务引发了网友们的广泛关注。不...
有的用户在使用条码打印机时,会出现条码打印机亮红灯的情况,导致条码打印机不能够打印,下面简单讲解一下有哪些原因会导致条码打印机亮红灯。条码打印机在打印时亮红灯,一般有几个原因。第一,如果在打印时,打印...
...故障室内外通信故障产生的原因主要是室内外连接线连接错误、室内外通信电路出现故障、室外电控出现故障没有电源供应等。下面按照检查步骤进行一一说明。A、首先空调上电,检查室外电控有没有电源(电控上有电源指示灯)...