등장 배경, HTTP/1.1과의 차이점, 현재까지 알려진 보안 이슈에 대해 알아보자.
등장 배경
- HTTP/1.1의 메시지 포맷은 구현의 단순성과 접근성에 주안점을 두고 최적화됨.
- 커넥션 하나로 요청 하나를 보내고 그에 대한 응답 하나만을 받는 HTTP의 메시지 교환 방식은 단순하지만, 응답을 받아야한 그 다음 요청을 보낼 수 있기 때문에 심각한 회전 지연(latency)이 있음.
- 이 문제를 회피하기 위해 병렬 커넥션이나 파이프라인 커넥션이 도입되었지만 성능 개선에 대한 근본적인 해결은 되지 못함.
- 구글은 SPDY(스피디)라는 프로토콜을 내놓았고 SPDY는 기존의 HTTP에 속도를 개선하기 위한 여러 기능을 추가한 것임.
- 헤더 압축을 통해 대역폭을 절약.
- 하나의 TCP 커넥션에 여러 요청을 동시에 보냄.
- 클라이언트가 요청을 보내지 않아도 서버가 능동적으로 리소스를 푸시.
- SPDY를 적용했을 때 RTT(round trip delay time)가 20ms인 상황에서 12.34%의 성능 개선이 있었음.
- 2012년 HTTP 작업 그룹은 SPDY를 기반으로 HTTP/2.0 프로토콜을 설계하기로 결정함.
개요
- HTTP/2.0은 서버와 클라이언트 사이의 TCP 커넥션 위에서 동작함.
- TCP 커넥션을 초기화하는 것은 클라이언트임.
- HTTP/2.0 요청과 응답은 길이가 정의된(최대 16363 바이트) 한 개 이상의 프레임에 담김.
- 프레임에 담긴 요청과 응답은 스트림을 통해 보내짐. 한 개의 스트림이 한 쌍의 요청과 응답을 처리함.
- 하나의 커넥션 위에 여러 개의 스트림이 동시에 만들어질 수 있음. 즉 여러개의 요청과 응답을 동시에 처리하는것이 가능함.
- 스트림에 대한 흐름 제어와 우선순위 부여 기능도 제공함.
- 서버 푸시를 도입함. 이를 통해 서버는 클라이언트에게 필요하다고 생각하는 리소스라면 그에 대한 요청을 명시적으로 받지 않더라도 능동적으로 클라이언트에게 보내줄 수 있음.
- 호환성 유지를 위해 HTTP/2.0은 요청과 응답 메시지의 의미를 HTTP/1.1과 같도록 유지하고 있음.
- Content-Length 헤더의 이름은
:cotent-length
가 됨.
- 상태줄을 표현하던 404 Not Found는 404 값을 갖고 있는
:status
헤더로 표현하게 됨.
HTTP/1.1과의 차이점
프레임

- 모든 메시지는 프레임에 담겨 전송됨. 모든 프레임은 8 바이트 크기의 헤더로 시작하며, 최대 16383 바이트 크기의 페이로드가 옴.