HTTP is a plaintext protocol. Sending an HTTP request is as simple as writing
GET / HTTP/1.1
Host: matt-rickard.com
If you want to see for yourself, you can run this command on the command line to send the raw HTTP request and see the result.
echo -en 'GET / HTTP/1.1\r\nHost: matt-rickard.com\r\n\r\n' | openssl s_client -ign_eof -connect matt-rickard.com:443
The response is plaintext as well
HTTP/1.1 200 OK
Connection: keep-alive
Content-Length: 20729
Content-Type: text/html; charset=utf-8
...
Plaintext protocols are
- Simple to implement
- Human readable
- Easy to debug
Simple works best even for applications at planet scale (powering the internet). Why do Protocols Win? Even our most machine-oriented systems still have a human element to them. There's no guarantee that HTTP would have beat out other protocols if it were designed with full efficiency over practicality on day one.
Sure, binary formats are more efficient and transfer less data over the network. For example, HTTP/2 and the proposal for HTTP/3 are binary protocols. But performance enhancements don't come without complexity and new issues. And those improvements come decades after learning the optimizations needed for the simple plain text protocol.