The Internet Engineering Task Force's HTTP Working Group has finalized its work on Hypertext Transfer Protocol 2, the successor to the HTTP/1.0 and HTTP/1.1 protocols that are the core of the Web.
The working group has actually finalized two closely related specifications. The first is HTTP/2 itself. The second is called HPACK, a specification for compressing HTTP/2 headers.
Work on HTTP/2 began in 2012 in response to the development of Google's SPDY protocol. Google created SPDY to address a number of performance gripes that the company had with traditional HTTP.
Perhaps the biggest issue with HTTP/1.x was its use of multiple connections to load resources in parallel. While a single HTTP/1.x connection between a client and a server can be used to request multiple different objects (the images, CSS, and JavaScript that an HTML page may require), those objects have to be served up in order, one after the other. If one object takes a long time, perhaps because it's very large or perhaps because it requires a lot of server time to create, then all the other objects requested subsequently have to wait.
As a result, most HTTP/1.x connections are used to request just a single object. Web clients do perform parallel loading of the objects that they need, but they do so by creating multiple connections to each server. But this has a cost of its own: it uses up additional network resources, and it takes extra time, with each individual connection requiring several transfers from client to server and back again.
HTTP/2 directly addresses this issue. In HTTP/2, multiple bidirectional streams are multiplexed over a single TCP connection. Each stream can carry a request/response pair, and multiple requests to a server can be made by using multiple streams. However, the streams are all independent; if one stream is slow, the HTTP/2 connection can still be used to transfer data belonging to other streams. Similarly, a client can request a large object and then a small object, and the response to the small object can be given before, or even during, the response to the large object. The waiting and sequential processing that are a feature of HTTP/1.x aren't needed in HTTP/2. The specification recommends that clients and servers support at least 100 different streams over a single connection.