Hello,
We have observed some issues with downloading firmware update over HTTP over NB-IoT. I'm aware that using TCP over NB-IoT is not recommended, but it is technically valid and should be possible. Devices started a download, but then download failed (with return code 1, also "try again") in the middle of transmitting. I found out that the issue was actually on the server side, as server closed the socket on a timeout of 5 seconds. I used node.js http-server, but other servers may have similar behavior. So the issue can be fixed by configuring the server correctly (setting keepAliveTimeout to zero in my case). However, I think that's also caused by not-quite-right behavior in FOTA download library as well: a connection closed at the server side isn't really an error if the download has progressed (have got some data) so it shouldn't increment error counter, we should just reconnect silently. Some server may not provide keep-alive at all (granted, that might be sub-optimal energy-wise, but still correct behavior).
So that ticket is mostly to share with those who experience the same problem. Using CoAP is probably the right solution, but that requires extra infrastructure, and HTTP overhead isn't outright catastrophic when at low repetition factor and the server is set up to account for high latency.
But also, would be great if the download library gets a little bit more robust about server behavior.