iOS 忽略 NodeMCU http 服务器响应和浏览器显示无连接
iOS ignoring NodeMCU http server response and browser shows no connection
所以我最近得到了一个 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 headers 我更改了 nodeMCU 发送到的响应:
<!DOCTYPE html><html><body><h1>My First Heading</h1><p>My first paragraph.</p></body></html>
iPad 仍然显示相同的消息。
所以我的问题是为什么 iOS 会这样,是什么阻止了它并让浏览器认为它没有互联网连接? iOS 上的浏览器是否以这种方式运行,或者 OS 上的浏览器是否在做一些奇怪的事情。我需要做什么才能让 iOS 设备看到网页?
天哪,那篇维基百科文章真的很糟糕(另见 https://github.com/nodemcu/nodemcu-firmware/issues/832)。这个代码示例我已经看过很多次了,但从未意识到它的来源。
首先,您不应该使用旧的 0.9.x 二进制文件,您的 NodeMCU 模块可能已经加载了。它们不再受支持并且包含很多错误。 Build a custom firmware from the dev
or master
branch. Second, checkout the official documentation on socket:send()
学习如何正确地做到这一点。
但实际问题是 conn:send("<h1> Hello, NodeMcu.</h1>")
,因为该消息不是有效的 HTTP 响应。您需要在其前面加上 HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n
.
类似的问题和答案是 and 。
所以我最近得到了一个 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 headers 我更改了 nodeMCU 发送到的响应:
<!DOCTYPE html><html><body><h1>My First Heading</h1><p>My first paragraph.</p></body></html>
iPad 仍然显示相同的消息。
所以我的问题是为什么 iOS 会这样,是什么阻止了它并让浏览器认为它没有互联网连接? iOS 上的浏览器是否以这种方式运行,或者 OS 上的浏览器是否在做一些奇怪的事情。我需要做什么才能让 iOS 设备看到网页?
天哪,那篇维基百科文章真的很糟糕(另见 https://github.com/nodemcu/nodemcu-firmware/issues/832)。这个代码示例我已经看过很多次了,但从未意识到它的来源。
首先,您不应该使用旧的 0.9.x 二进制文件,您的 NodeMCU 模块可能已经加载了。它们不再受支持并且包含很多错误。 Build a custom firmware from the dev
or master
branch. Second, checkout the official documentation on socket:send()
学习如何正确地做到这一点。
但实际问题是 conn:send("<h1> Hello, NodeMcu.</h1>")
,因为该消息不是有效的 HTTP 响应。您需要在其前面加上 HTTP/1.0 200 OK\r\nContent-Type: text/html\r\n\r\n
.
类似的问题和答案是