所以我最近得到了一个nodeMCU Lua V1,我启动它连接到我的WiFi,并从https://en.wikipedia.org/wiki/NodeMCU#HTTP_server加载了默认的HTTP服务器。兴奋地,我在我的ADSL路由器上做了一个端口前进,并要求朋友连接以查看我的hello world响应。我的朋友有苹果设备(iPhone / iPad)无法加载网站。与Android设备或计算机的朋友一起查看网站没有问题。我尝试使用同一WiFi网络上的iPad。它也有这种行为。为了弄清楚发生了什么,我在iPad上尝试了不同的浏览器。我做了一个Wireshark跟踪,看到NodeMCU将响应发送到iPad。但iPad一直显示连接错误,或者你是离线消息。认为它可能是缺少的html标题我改变了nodeMCU发送到的响应:
<!DOCTYPE html><html><body><h1>My First Heading</h1><p>My first paragraph.</p></body></html>
iPad仍显示相同的信息。
所以我的问题是为什么iOS会以这种方式运行,什么阻止它并让浏览器认为它没有互联网连接? iOS上的浏览器是以这种方式运行,还是操作系统做了一些奇怪的事情。为了让iOS设备看到网页,我需要做些什么?
答案 0 :(得分:1)
天哪,维基百科的文章确实很糟糕(另见https://github.com/nodemcu/nodemcu-firmware/issues/832)。我已经多次看过这个代码示例,但从未意识到它源自何处。
首先,您不应该使用您的NodeMCU模块可能加载的旧的0.9.x二进制文件。它们不再受支持并且包含许多错误。来自dev
或master
分支的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
作为前缀。