-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Description
When I happened to see another (or a new) HTTP & SSL issue the other day I went "Grrr, why me again?". Some of you may remember π
TL;DR
Many HTTPS requests from the http module fail while connecting to the same resources with the net/TLS module usually succeeds.
Test code
function test(host, path)
local url = "https://" .. host .. path;
http.get(url, nil, function(code, data)
if (code < 0) then
print("HTTP request to " .. url .. " failed")
else
print("HTTP request to " .. url .. " succeeded")
end
end)
local srv = tls.createConnection(net.TCP, 0)
srv:on("receive", function(sck, c) print("net/TLS to " .. url .. " succeeded") end)
srv:on("connection", function(sck, c)
sck:send("GET " .. path .. " HTTP/1.1\r\nHost: " .. host .. "\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")
end)
srv:connect(443, host)
end
test("raw.githubusercontent.com", "/espressif/esptool/master/MANIFEST.in")Test result
net/TLS to https://raw.githubusercontent.com/espressif/esptool/master/MANIFEST.in succeeded
HTTP client: Connection timeout
Then I checked heap: 25312. That was suspiciously low, I started with ~44k, so I ran test("raw.githubusercontent.com", "/espressif/esptool/master/MANIFEST.in") again and got
E:M 528
E:M 272
HTTP client: Disconnected with error: 46
HTTP client: Connection timeout
HTTP client: Connection timeout
-> no successful feedback from net/TLS code anymore.
Does "HTTP client: Disconnected with error: 46" indicate that the client was still maintaining the previous (failed) connection which it tried to kill first? I have my doubts because I sometimes also see this when the test runs after a clean reboot.
I tested a few more URLs, each after a clean reboot with both http and net modules.
| URL | http | net/TLS |
|---|---|---|
| https://raw.githubusercontent.com/espressif/esptool/master/MANIFEST.in | β | β |
| https://httpbin.org/ip | β | β no output at all, not even error |
| https://nodemcu-build.com | β | β |
| https://clients5.google.com/pagead/drt/dn/ | β | β |
NodeMCU version
NodeMCU custom build by frightanic.com
branch: dev
commit: 5425adefff62f9ea2094e3e4581a79f1424e4433
SSL: true
modules: file,gpio,http,net,node,tmr,uart,wifi,tls
build built on: 2017-01-06 19:39
powered by Lua 5.1.4 on SDK 2.0.0(656edbf)Hardware
NodeMCU devkit v2