2016-06-09 5 views
0

그래서 저는 최근 nodeMCU 루아 V1을 얻었습니다. WiFi를 연결하기 시작했고 https://en.wikipedia.org/wiki/NodeMCU#HTTP_server의 기본 HTTP 서버를로드했습니다. Excitedly 나는 ADSL 라우터에서 포트를 만들었고 친구들에게 내 안녕하세요 세상 응답을 볼 것을 요청했습니다. 사과 장치 (iPhone/iPad)가있는 내 친구는 웹 사이트를로드 할 수 없습니다. 안드로이드 기기 나 컴퓨터가있는 친구가 사이트를 보는 데 아무런 문제가없는 경우. 나는 같은 와이파이 네트워크에있는 내 iPad를 사용해 보았다. 그것은 또한이 행동을했다. 무슨 일이 일어나고 있는지 알아 내기 위해 iPad에서 다른 브라우저를 사용해 보았습니다. Wireshark 추적을 수행하고 NodeMCU가 iPad에 응답을 보내는 것을 보았습니다. 그러나 iPad는 연결 오류를 보여 주거나 오프라인 메시지입니다. HTML 헤더가 누락 된 것 같아서 nodeMCU가 보내는 응답을 변경했습니다.iOS가 NodeMCU를 무시함 http 서버 응답 및 브라우저에 연결이 없음

<!DOCTYPE html><html><body><h1>My First Heading</h1><p>My first paragraph.</p></body></html> 

여전히 iPad는 동일한 메시지를 보였습니다.

제 질문은 iOS가 이런 식으로 행동하는 이유, 차단하는 이유와 브라우저에 인터넷 연결이 없다고 생각하는 이유입니다. iOS의 브라우저가 이러한 방식으로 작동하는지 아니면 이상한 일을하는 OS인지 확인하십시오. iOS 기기에서 웹 페이지를 보려면 무엇을해야합니까?

답변

1

아, 위키피디아의 기사는 정말 끔찍합니다 (https://github.com/nodemcu/nodemcu-firmware/issues/832 참조). 나는이 코드 예제를 여러 번 본 적이 있지만 그것이 어디에서 유래했는지 결코 깨닫지 못했다.

우선 NodeMCU 모듈이로드 될 예정인 0.9.x 바이너리를 사용하면 안됩니다. 더 이상 지원되지 않으며 많은 버그가 포함되어 있습니다. dev 또는 master 분기의 Build a custom firmware 둘째, 제대로 수행하는 법을 배우려면 socket:send()의 공식 문서를 확인하십시오.

메시지가 유효한 HTTP 응답이 아니기 때문에 실제 문제는 conn:send("<h1> Hello, NodeMcu.</h1>")입니다. 접두사가 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

애플에게 물어보아야 할 것이다. 나는 다른 브라우저가 응답을 처리 할 때 좀 더 "관대"하고 용서할 수 있다고 추측 할 수있다. IMO는 근본적인 오류를 가려 내기 때문에 실제로 나쁜 행동입니다. –