2016-06-09 65 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

你不得不問蘋果......我只能猜測其他瀏覽器在處理響應時有點「寬大」和寬容。海事組織這實際上是不好的行爲,因爲它掩蓋了根本的錯誤 –