HTTP/2는 어플리게이션 계층이지만 전송 계층에 가까운 내부 구조를 가지고 있는 특징이 있다. 물론 TCP가 패킷순서와 재전송 등을 처리해주므로 TCP의 플로 컨트롤보다는 단순하게 되어있다.
HTTP/2의 플로 컨트롤은, HTTP/2의 Stream의 통신량을 제어하여 통신을 효율적으로 하기 위해 사용된다. 예를 들어, 어느 한쪽이 일방적으로 대량의 스트림을 보내게 되는 사태를 방지하기 위함이다.
이를 위해 HTTP/2 자체의 윈도우 버퍼를 사용한다. 초기 윈도우의 크기는 64KB이다. 송신하는 쪽은 상대방의 최대 버퍼 크기만큼 데이터를 보낸다. 수신하는 쪽에서는 전송된 패킷을 처리하고 버퍼에 여유가 생기면 그 버퍼 정보를 상대방에게 알려준다. (WINDOW_UPDATE)
SETTINGS 프레임을 사용하여 초기 윈도우 크기, 최대 병렬 스트림수, 최대 프레임 크기, 최대 헤더 리스트 길이와 같은 설정들을 조정할 수 있다.