【问题标题】:Apache cgi script invoked from browser but not embedded device从浏览器而不是嵌入式设备调用的 Apache cgi 脚本
【发布时间】:2019-01-24 15:18:35
【问题描述】:

我正在做一个涉及两个嵌入式设备的项目,我们称它们为 A 和 B。设备 A 是控制器,B 被控制。我的目标是为设备 B 制作一个模拟器,也就是说,它的行为类似于 B,所以 A 认为它正在控制 B,但实际上,它正在控制我自己的模拟器。我无法控制也无法改变 A。

通过控制器发布 GET 命令调用各种 cgi 脚本进行控制,因此计划是在“我的”设备上安装 apache,设置 CGI 并复制各种脚本。我在 Ubuntu 16.04.5 上运行 apache 版本 2.4.18 并配置了 Apache2,因此它可以根据 URL 成功运行各种脚本。例如,其中一个脚本名为“man_session”,设备 A 发出的典型 URL 如下所示:http://192.168.0.14/cgi-bin/man_session?command=get&page=122

我已经构建了一个名为“man_session”的 C/C++ 程序,并已成功配置 Apache 以在提交此 URL 时调用我的脚本。我可以根据 apache 日志看到这一点:

192.168.0.2 - - [24/Jan/2019:14:38:38 +0000] "GET /cgi-bin/man_session?command=get&page=122 HTTP/1.1" 200 206 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"

另外,我的脚本写入 stderr,我可以在日志文件中看到输出:

[Thu Jan 24 14:46:10.850123 2019] [cgi:error] [pid 23346:tid 4071617584] [client 192.168.0.2:62339] AH01215: Received man_session command 'command=get&page=122': /home/pi/cgi-bin/man_session

到目前为止一切顺利。我遇到的问题是,当设备 A 发出请求时,脚本不会被调用,只有当我通过浏览器(Chrome 和 Internet Explorer 都可以)或 curl 发出请求时。浏览器在我的 Windows PC 上运行,curl 在嵌入式设备“B”本身上运行。

当我打开设备 A 时,我可以在日志中看到 URL 活动,但脚本没有被调用。下面是一个显示 URL 但不调用“man_session”脚本的日志条目。它显示了 400 的代码,根据 HTTP 规范,这是一个“由于格式错误的语法”错误。其他差异是缺少引用和用户代理信息以及 http 1.0 与 http 1.1,但我不明白为什么这些很重要。

192.168.0.9 - - [24/Jan/2019:14:38:12 +0000] "GET /cgi-bin/man_session?command=get&page=7 HTTP/1.0" 400 0 "-" "-"

请注意,设备 A 是 192.168.0.9,我的 PC 是 192.168.0.2。我在这里缺少什么,为什么上面的 URL 没有像浏览器发出的那样调用脚本?有没有什么地方可以得到更多关于为什么在这种情况下会出现代码 400 的信息?

【问题讨论】:

    标签: apache cgi-bin


    【解决方案1】:

    经过一番折腾,我终于弄清楚了问题所在。采取的步骤:

    1. 提高了调试日志级别(而不是 apache2.conf 中的默认“警告”
    2. 这导致日志中显示以下错误消息

    [2019 年 1 月 26 日星期六 02:47:56.974353] [core:debug] [pid 15603:tid 4109366320] vhost.c(794): [client 192.168.0.9:61001] AH02415: [strict] Invalid host name ' 192.168.000.014'

    1. 经过一番研究,将以下行添加到 apache2.conf 文件中

      HttpProtocolOptions 不安全

    这修复了它,脚本现在按预期调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多