HTTP/2 is the third major iteration of the HTTP protocol. Like 1.1, it uses a persistent TCP connection that is maintained for requesting/responding several web objects. Its key goal was to decrease the delay associated with GETting multi-object HTTP requests.
Compared to HTTP/1.1
It increases flexibility on the server-side in how they want to send objects to client. Unlike HTTP/1.1 (which sends objects in FIFO FCFS order), the transmission order of requested objects is based on client-specified object priority.
Unrequested objects are pushed to the client. Objects are divided into frames, and scheduled to mitigate HOL blocking (head-of-line, where small objects have to wait for transmission behind large objects).

Compared to HTTP/3
Since HTTP/2 uses a TCP connection, then packet loss will stall all object transmissions (since TCP is lossless). Browsers have an incentive to open multiple parallel TCP connections to reduce stalling. There’s also no security over a vanilla TCP connection.
3 adds security (encryption over QUIC), object-level error- and congestion control (more pipelining). It also runs over UDP instead of TCP.