* It closes the connection after every request, making poor use of TCP sliding window
* Binary file transfers are finished by the server closing the connection. There's no end-of-file marker or Length header.
* No provisions for caching
* A single ASCII letter identifies all file types
It's just a bad protocol design. HTTP/0.9 had many of the same problems, but that's not where HTTP is anymore. Gopher+ solves the single-letter identifier problem by using MIME types, but none of the other problems above. Not that anybody has ever implemented Gopher+, anyway.