2016-06-09 60 views
0

所以我最近得到了一个节点MCU Lua V1,我开始连接到我的WiFi,并从https://en.wikipedia.org/wiki/NodeMCU#HTTP_server加载默认的HTTP服务器。兴奋地我在我的ADSL路由器上做了一个端口转发,并要求朋友连接以查看我的Hello World响应。我的朋友有苹果设备(iPhone/iPad)无法加载网站。与Android设备或电脑的朋友在浏览网站时没有任何问题。我试着用我的iPad在同一个WiFi网络上。它也有这种行为。为了弄清楚发生了什么,我在iPad上尝试了不同的浏览器。我做了一个Wireshark跟踪,看到NodeMCU向iPad发送响应。但iPad一直显示连接错误,或者你是离线消息。认为它可能是缺少的html头我改变了响应节点MCUU发送到:iOS忽略NodeMCU http服务器响应和浏览器显示无连接

<!DOCTYPE html><html><body><h1>My First Heading</h1><p>My first paragraph.</p></body></html> 

仍然iPad显示相同的消息。

所以我的问题是为什么iOS的行为是这样的,什么阻止它,使浏览器认为它没有互联网连接? iOS上的浏览器是以这种方式行事,还是操作系统在做一些奇怪的事情。为了让iOS设备看到网页,我需要做些什么?

回答

1

呵呵,那维基百科的文章真的很糟糕(另见https://github.com/nodemcu/nodemcu-firmware/issues/832)。我多次看过这个代码示例,但从未意识到它起源于何处。

首先,您不应该使用您的NodeMCU模块可能加载的旧的0.9.x二进制文件。他们不再被支持并包含大量的错误。来自devmaster分支的Build a custom firmware。其次,检查关于socket:send()的官方文档,了解如何正确执行此操作。

虽然实际的问题是conn:send("<h1> Hello, NodeMcu.</h1>"),因为该消息不是有效的HTTP响应。您需要以HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n作为前缀。

同类问题&答案是herehere

+0

谢谢你解决这个问题,它现在可以工作,为什么只有iOS设备拒绝这个作为一个有效的响应?看起来,iOS网络堆栈拒绝该消息,并尝试再次获取TCP数据包2次。为什么添加HTTP/1.0 ...解决了似乎只发生在iOS设备上的问题。 –

+0

你不得不问苹果......我只能猜测其他浏览器在处理响应时有点“宽大”和宽容。海事组织这实际上是不好的行为,因为它掩盖了根本的错误 –