有没有办法确定试图连接到“ HTTP服务器”的协议?

问题描述

我有以下情况:我的客户仅知道他们拥有一台允许您列出HTTP地址(或至少看起来像HTTP地址的地址)的设备,当他们“按下按钮”(基本上,他们可以根据其物理操作触发该过程)。

我已经建立了一个gunicorn服务器来侦听他们的请求,但是我只得到[WARNING] Invalid HTTP request received。这并不能说明什么,但经过一些研究,似乎当使用错误的协议时,经常会出现此警告。另外,无论我如何使请求格式错误,都无法使用curl来复制问题。

我想在服务器前添加一些东西,以检测接收到的请求是否是HTTP 2.0、1.1、1.0,UDP,WebSocket ...等等;我只想知道他们在寄给我什么。我对HTTP版本(即使1.0和1.1的curl不会失败)和UDP尤其感兴趣,因为它们是最有可能解决该问题的人。

一个不错的工具吗?

解决方法

根据您的问题,我想到了各种情况下的这些可能的解决方案。

您可以在gunicorn中记录您的请求,并根据需要查看它们,here是一种方法。

记录请求后,您可以查看它们以及响应。这样,您可以找出格式错误的请求,并在发送请求的设备中对其进行更正。

并且,如果要监视LAN上的请求,则可以添加TCP Sniffer,或使用Wireshark。注意:由于SSL缺省情况下不适用,因此它只会记录HTTP请求,您可能必须对其进行配置。

如果没有任何效果,则可以创建一个示例服务器进行测试,记录针对特定路径接收的完整HTTP请求和响应数据包,并按所需方式对其进行编辑。