iOS 忽略 NodeMCU 的 http 服务器响应,浏览器显示未连接

我最近获得了一个 NodeMCU Lua V1,我启动它并连接到我的 WiFi,然后从 https://en.wikipedia.org/wiki/NodeMCU#HTTP_server 加载了默认的 HTTP 服务器。我兴奋地在 ADSL 路由器上进行了端口转发,并要求朋友连接以查看我的 hello world 响应。我的使用苹果设备 (iPhone/iPad) 的朋友无法加载网站。而使用安卓设备或计算机的朋友则毫无问题地查看该网站。我尝试在同一 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 设备查看网页?

点赞
用户131929
用户131929

哦,天啊,那篇维基百科的文章真的很糟糕(也可以看看https://github.com/nodemcu/nodemcu-firmware/issues/832)。我看过这个代码示例很多次,但从来没有意识到它的起源。

首先,您不应使用NodeMCU模块上可能加载的旧的0.9.x二进制文件。它们不再受支持,并且包含很多错误。从“dev”或“master”分支构建自定义固件。其次,请查看官方文档socket:send()以了解如何正确地执行此操作。

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

类似的问题和答案在这里:https://stackoverflow.com/a/37379426/131929https://stackoverflow.com/a/36972273/131929

2016-06-10 05:20:47