【问题标题】:iOS ignoring NodeMCU http server response and browser shows no connectioniOS 忽略 NodeMCU http 服务器响应和浏览器显示没有连接
【发布时间】:2016-10-10 18:56:51
【问题描述】:

所以我最近得到了一个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 设备看到网页?

【问题讨论】:

    标签: lua nodemcu


    【解决方案1】:

    哦,天哪,维基百科的那篇文章真的很糟糕(另见https://github.com/nodemcu/nodemcu-firmware/issues/832)。我已经多次看到这个代码示例,但从未意识到它的来源。

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

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

    类似的问题和答案是herehere

    【讨论】:

    • 感谢您解决这个问题,它现在可以工作了,为什么只有 iOS 设备会拒绝这不是有效的响应?似乎 iOS 网络堆栈拒绝了该消息并尝试再次获取 TCP 数据包 2 次。为什么添加 HTTP/1.0... 解决了似乎只发生在 iOS 设备上的问题。
    • 你得问苹果...我只能猜测其他浏览器在处理响应时会更加“宽容”和宽容。 IMO 这实际上是不好的行为,因为它掩盖了基本错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 2020-06-12
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-07
    相关资源
    最近更新 更多