HTTP 1.0 had to open a connection to the server, send a request, receive a response, and close it. It could not reuse connections for multiple requests
HTTP 2 gives each request a unique identifier. Thus, data for any request can come back in any order (since it can be reffered to by its identifier)
solving head of line blocking
HTTP 2 allows for bi-directional data streams
Converts all messages and encodes them into binary (as opposed to plain text in HTTP/1.1)
Plain text data is just binary that is not compressed (the compressed data is gzipped for example)
Messages are split up into small pieces called frames and can be mixed and matched
Since there are only needs to be one bi-directional multiplexed stream, HTTP 2 only needs one connection
Allows for server push where the server pushes resources it knows the client will need without the client asking for it (e.g. links in a web page before the client parses and requests them)