HTTP/2 does solve one issue very well. The server goodbye message indicates the last request seen, which enables the client to know if a request sent before closing can be retried or not.
In http/1.1, if you send a non-idempotent request on a keep-alive socket and the server closes it 'simultaneously', you won't know if the server didn't see it (safe to retry), or if the server crashed while processing it (not intrinsicly safe to retry).
TCP-in-TCP offers predictably bad worse cases, but does offer some nice effects in good cases.
In http/1.1, if you send a non-idempotent request on a keep-alive socket and the server closes it 'simultaneously', you won't know if the server didn't see it (safe to retry), or if the server crashed while processing it (not intrinsicly safe to retry).
TCP-in-TCP offers predictably bad worse cases, but does offer some nice effects in good cases.