HTTP 1.0에는 동일한 서버와 통신 시 매 요청마다 연결과 해제가 반복되었다.
따라서 HTTP 1.1에서는 Persistent Connection을 사용했다.
이는 연결과 해제에 사용되는 3-way handshake, 4-way handshake의 비용이 비싸기 때문이다.
또한 HTTP 1.0에서는 요청에 대한 응답이 도착했을 때 다음 요청을 보냈지만, HTTP 1.1에서는 Pipelining을 사용하여 여러 요청을 한 번에 다룰 수 있다.
하지만 Head-of-line(HOL) Blocking 문제가 발생할 수 있다.
1번 요청에 대한 응답 전에 2번, 3번 요청에 대한 응답은 blocking 되어 시간이 지연된다.
HTTP 2.0에서는 요청이 병렬적으로 이루어지기 때문에 HOL 문제가 해결되었다.
그 외에도 HTTP 2.0에는 Frame, Stream이라는 단위가 추가되었다.
하나의 Message에는 다수의 Frame이 존재하는데, Frame은 Header 혹은 Data이다.
Text -> Frame 단위 binary encoding으로 파싱, 전송 속도가 되었다.
Stream은 여러 개의 Message이고 클라이언트와 서버 사이 연결을 통해 양방향으로 주고 받는다.
1번 Stream은 Request Message와 Reponse Message가 1개씩 존재하고 Request에는 하나의 Header Frame이, Reponse에는 Header Frame과 Data Frame에 하나씩 존재한다.
즉, Stream은 하나의 Connection으로 여러 개의 Message를 처리하는 것을 가능하게 해준다.