使用单元模块请求 Heroku 应用程序时出现 HTTP 505 错误

HTTP 505 error when requesting Heroku apps w a cell module

我正在尝试使用 Telit GE910 单元模块通过单元网络发出 HTTP 请求。我已经通过 FTDI 板将它连接到我电脑的 USB 端口,并通过终端向它发送 AT 命令。我正在使用 AT 命令在命令模式下成功打开套接字并发送 HTTP 请求。

AT#SD=1,0,80,"google.com",0,0,1
OK
�AT#SSEND=1
> HE�AD� /� HTT�P/1.1


OK

SRING: 1

我不明白为什么会出现这些 �。向 google.com 发出请求时,这很好,但托管在 Heroku 上的任何内容都会给我一个 505 错误。

HTTP/1.1 505 HTTP Version Not Supported
Connection: close
Server: Cowboy
Date: Tue, 26 Apr 2016 20:39:34 GMT
Content-Length: 0

我在一两个论坛上读到,这个 505 响应是 Heroku 特有的,与 HTTP 请求中的不正确间距有关。我怀疑无法识别的字符正在造成问题。到底是怎么回事?他们总是在 'A'、'space' 和 'P' 之前出现;可能还有其他字母,但这些是我见过的。

好的,我已经弄清楚(我认为)为什么我会收到 505 响应。然后我开始得到 400,但我也想通了!

在 Nimbelink(这是一家使用 Telit 单元模块的供应商——我有一个带有 Telit GE910 的模块)的套接字拨号应用说明中,它说在您输入 HTTP 请求后(例如 GET / HTTP/1.1)您需要按两次 ctrl+j 以表示请求结束。

好吧,我开始在 CoolTerm 中进行所有串行通信,这样我就可以看到我发送的 HEX。 (我希望我能抓住 � 字符——我没有,事实上它们不会出现在 CoolTerm 中。)ctrl+j 导致单行输入(HEX :0A)。根据 HTTP 文档,要发出行尾信号,您需要使用回车符 return 换行符(十六进制:0D 0A)。 (Heroku also says it has to be formatted like this.) 这是我点击 enter 时发送的内容。因此,如果我以 enter 结束 GET / HTTP/1.1 两次,请求就会得到。尽管 HEAD / HTTP/1.1 对 heroku.com 的请求也会以 400 的形式返回。但接下来是:

根据 RFC(我发现 here)HTTP 1.1 需要主机。所以如果我用正确的行尾来完成整个事情

GET / HTTP/1.1
Host: heroku.com 

有效!它也适用于发布到我的服务器。