HTTP/2 internals

HTTP/2는 한 TCP 연결 안에 여러 스트림을 프레임으로 섞는다

HTTP/2의 성능 개선은 요청을 하나로 합치는 것이 아니라, HEADERS와 DATA 프레임을 stream ID로 구분해 한 연결에서 섞어 보내는 데 있습니다. 단, TCP 손실은 여전히 연결 전체에 영향을 줍니다.

message HTTP 의미는 유지 method, path, status, header, body 모델은 그대로입니다.
frame HEADERS/DATA로 분해 각 프레임은 stream ID를 갖고 연결 위에서 섞입니다.
stream 요청마다 독립 흐름 우선순위와 flow control은 stream/connection 양쪽에 있습니다.
TCP 전송은 하나의 순서 있는 바이트열 패킷 손실은 뒤쪽 바이트 전달을 함께 막을 수 있습니다.
항목
좋아진 점
남는 한계
관측 신호
multiplexing
한 연결에서 여러 요청 진행
TCP 손실은 연결 전체 지연
stream별 지연, packet loss
HPACK
반복 헤더 전송량 감소
동적 테이블 동기화와 민감 헤더 주의
header size, compression errors
flow control
느린 수신자를 제한
window가 작으면 전송 정체
WINDOW_UPDATE, stalled streams

도메인 샤딩 HTTP/2에서는 여러 연결이 항상 이득이 아니다 연결 재사용과 압축 효율을 오히려 떨어뜨릴 수 있습니다.

TCP HOL HTTP 계층 HOL은 줄었지만 전송 계층 HOL은 남는다 손실 네트워크에서는 HTTP/3 검토 이유가 됩니다.

server push 프로토콜 기능과 실무 채택은 다르다 캐시 중복과 예측 실패 때문에 현대 브라우저에서는 제한적입니다.