【问题标题】:Weird HTTP Response Arduino奇怪的 HTTP 响应 Arduino
【发布时间】:2014-01-07 00:45:45
【问题描述】:

所以,我编写了一个连接到服务器的程序,它会返回时间。它可以在我的服务器上运行,但是当我尝试在另一台服务器上使用它时,它的响应很奇怪。这是我服务器的响应:

HTTP/1.1 200 OK
Date: Tue, 07 Jan 2014 00:06:20 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.4-14+deb7u5
Set-Cookie: PHPSESSID=jlscamqbddtqibf9j7m0fu27p5; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Length: 6
Connection: close
Content-Type: text/html

4:06pm

效果很好。现在这是来自另一台服务器的响应(不起作用):

HTTP/1.1 200 OK
Date: Tue, 07 Jan 2014 00:06:34 GMT
Server: Apache
Set-Cookie: PHPSESSID=krlqmoqgpiqm9b9u27agup53c7; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Connection: close
Content-Type: text/html

6
4:06pm
0

如您所见,在预期响应前后我得到了一些奇怪的东西。服务器上的代码完全相同。除了几个字符串之外,Arduino 上的代码是相同的。

这是我正在使用的代码的粘贴箱:http://pastebin.com/TFF5h2Gw 抱歉,没有很多cmets,而且有点混乱。我省略了一些其他东西使用的代码,因为我什至没有时间测试。

【问题讨论】:

  • 也没有Content-Length:。我似乎记得有一些选项不需要明确设置 Content-Length,但我不太记得它们。您可能必须查看 HTTP 规范才能了解何时会发生这种情况。
  • 我认为它正在等待一个我没有发送但我不知道它会是什么的请求。

标签: http arduino ethernet


【解决方案1】:

您看到的是chunk-encoded response。这没关系,因为所有支持 HTTP/1.1 的客户端都应该理解这种传输编码。奇怪的是服务器没有明确地将响应标记为块编码(这通常通过 Transer-Encoding: chunked 标头完成)。

摆脱这种情况的一种快速方法是发出 HTTP/1.0 请求。

【讨论】:

  • 我不记得为什么 HTTP/1.0 不起作用,但它不起作用。不过,我今天会再试一次。有没有办法可以要求它不以这种方式编码?
  • 您可以尝试发送一个空的TE 标头。这将向服务器发出任何形式的传输编码都不可接受的信号。但是,不能保证成功。我猜服务器只会检查客户端是否通过 HTTP/1.1 请求了某些东西,而不再检查。
  • 嗯,我不记得为什么 HTTP/1.0 以前不起作用,但这次它起作用了,所以我不会担心它。然而,我确实发现使用 Accept-Encoding: gzip 也摆脱了 Transfer-Encoding: chunked 但这并没有真正帮助我完成我的 Arduino 项目。
猜你喜欢
  • 2020-08-13
  • 1970-01-01
  • 2022-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-28
  • 2011-03-27
相关资源
最近更新 更多