http: use once() instead of on() for timeout listeners

Switching to `once()` helps to avoid potential memory leaks
and reduces the need to call `removeListener()`.

Closes #7297