You are criticizing gopher from the point of view of "it must have the same features as HTTP". Some of the things you call "problems" are just different ways of doing it.
And if the TCP sliding window is an issue for you, why not fix TCP?
Why should the server send any kind of header?
Doesn't TCP do checksums, already?