[ 소개 ]
- HTTP Upgrade Protocol 요소는 HTTP/2 프로토콜에 대한 업그레이드 프로토콜을 나타내며, 이 컴포넌트의 인스턴스는 반드시 HTTP/1.1 Connector 와 연결되어야 한다.
1. HTTP/2 Connector 의 특정
1) 논블로킹 I/O (Non-bloking I/O) 사용
- HTTP/2 Connector 는 논블로킹 I/O를 사용하며, 데이터의 읽기 쓰기가 필요할 때만 Thread Pool 의 컨테이너 스레드를 사용한다.
2) 블로킹(Bloking) 기반 서블릿 API 와의 호환성
- 서블릿 API 는 본질적으로 블로킹 방식이기 때문에, 각 HTTP/2 스트림은 해당 스트림이 지속되는 동안 전용 컨테이너 스레드가 필요하다.
2. HTTP/2 Request 속성
- HTTP/2 를 사용하여 처리되는 요청은 다음과 같은 추가 Request 속성을 제공한다.
1) org.apache.coyote.connectionID
- HTTP/2 연결ID(Connection ID) 를 반환한다.
2) org.apache.coyote.streamID
- HTTP/2 스트림ID(Stream ID) 를 반환한다.
3. HTTP Upgrade Protocol 요소의 사용 예
<Connector ... >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
</Connector>
[ 속성 ]
1. 공통 속성
- 모든 Upgrade Protocol 구현체는 다음 속성을 지원한다.
속성 | 설명 |
---|---|
className (필수) |
반드시 org.apache.coyote.http2.Http2Protocol 로 설정해야 한다. |
1004lucifer
2. 표준 구현 속성
- HTTP/2 Upgrade Protocol 구현체는 위 속성 외 아래의 속성을 추가로 지원한다.
속성 | 설명 |
---|---|
discardRequestsAndResponses | 컨테이너의 내부 Request/Response 처리 객체를 재활용 할지 여부 (기본값: false) true 로 설정 시 해당 Request 및 Response 객체가 매 요청 후 (GC)가비지컬렉션에 의해 처리되며 false 설정 시 재사용된다. |
initialWindowSize | 클라이언트에 알려주는 스트림의 초기 flow control window 크기 제어 (기본값: 65535) |
keepAliveTimeout | 활성 스트림이 없는경우 HTTP/2 프레임간에 연결을 닫기 전까지 대기 시간 (기본값: 20000 - 20초) (-1)음수값 지정시 무한대기함. |
maxConcurrentStreamExecution | (컨테이너 Thread Pool Thread 의) 하나의 Connection 에 대해서 할당할수 있는 최대 스트림 개수 (기본값: 20) |
maxConcurrentStreams | 하나의 Connection 에 허용되는 최대 활성 스트림 개수 (기본값: 100) 초과 시 STREAM_REFUSED 오류로 스트림이 초기화 된다. |
maxHeaderCount | Request 에서 허용하는 최대 Header 개수 (기본값: 100) 초과 시 요청이 거부되며, 음수값 지정 시 제한없음 |
maxTrailerCount | Request 에서 허용하는 최대 Trailer Header 개수 (기본값: 100) 초과 시 요청이 거부되며, 음수값 지정 시 제한없음 |
overheadContinuationThreshold | (마지막이 아닌) CONTINUATION 프레임의 페이로드 크기가 이 임계값 보다 작으면 오버헤드 카운트 증가 (기본값: 1024) 0 이하의 값으로 설정 시 비활성화 오버헤드 카운트는 overheadContinuationThreshold/payloadSize 만큼 증가하므로 CONTINUATION 프레임이 작을수록 오버헤드 횟수의 증가가 커진다. overheadCountFactor 속성과 관련이 있음 |
overheadCountFactor | 오버헤드 프레임을 계산할 때 적용되는 계수 (기본값: 10) Connection 의 오버헤드가 너무 높은지 여부를 결정하고 Close 해야 하는지 확인하기 위해 오버헤드 프레임을 계산한다. 오버헤드 카운트는 -10 * overheadCountFactor 에서 시작하며 값이 0 을 초과하면 Connection 이 Close 된다. 0 이하의 값 설정 시 비활성화 된다. 일반적인 상황에서 20 이상의 값은 스트림이 완료되기전에 Connection 을 Close 한다. 오버헤드 카운트는 송수신되는 각 데이터 프레임과 수신되는 각 헤더 프레임에 대해 20씩 감소한다. 오버헤드 카운트는 수신되는 각 설정, 우선순위, 우선순위 업데이트 및 ping 프레임에 대해 overheadCountFactor 만큼 증가한다. |
overheadResetFactor | 수신되는 각 Reset 프레임에 대해서 오버헤드 카운트를 증가시키는 값(기본값: 50) 음수 설정 시 0으로 처리된다. overheadCountFactor 속성과 관련이 있음 |
overheadDataThreshold | DATA 프레임의 평균 페이로드 크기가 이 임계값보다 작으면 오버헤드 카운트 증가 (기본값: 104) 0 이하의 값 설정 시 비활성화 오버헤드 횟수는 overheadDataThreshold/average 만큼 증가하므로 평균이 작을수록 오버헤드 횟수의 증가가 커진다. overheadCountFactor 속성과 관련이 있음 |
overheadWindowUpdateThreshold | WINDOWS_UPDATE 프레임의 평균 크기가 이 임계값보다 작으면 오버헤드 카운트 증가 (기본값: 1024) 0 이하 값 설정 시 비활성화 오버헤드 횟수는 overheadWindowUpdateThreshold/average 만큼 증가하므로 평균이 작을수록 오버헤드 횟수의 증가가 커집니다 overheadCountFactor 속성과 관련이 있음 |
readTimeout | 부분적인 HTTP/2 프레임이 수신 후 추가 데이터를 기다리는 시간 (기본값: 5000 - 5초) 음수값 설정 시 무한대기 |
streamReadTimeout | 스트림에 추가 데이터 프레임 도착 대기 시간 (20000 - 20초) 애플리케이션이 블로킹 I/O 데이터를 읽고나서 추가 스트림 데이터가 필요할 때 대기하는 시간 음수값 설정 시 무한대기 |
streamWriteTimeout | WINDOW_UPDATE 프레임을 기다리는 시간 (20000 - 20초) 애클리케이션이 블로킹 I/O 쓰기 수행할 때 스트림 또는 Connection 의 flow control window 가 부족한경우 window update 프레임 대기 음수값 설정 시 무한대기 |
useSendfile | sendfile 기능 활성화 여부 결정 (기본값: true) 연결된 Connector 의 useAsyncIO 속성이 false 인 경우 이 속성은 무시되고 sendfile 기능이 비활성 된다. HTTP/2 sendfile 기능은 Windows 에서 파일 잠금을 유발하는 것으로 알려진 MappedByteBuffer 를 사용한다. |
writeTimeout | 부분적으로 작성된 HTTP/2 프레임에 대해 추가 데이터를 쓰기위한 대기시간 (5000 - 5초) 음수값 설정 시 무한대기 |
- HTTP/2 Upgrade Protocol 은 아래의 속성을 중첩된 HTTP Connector 로 부터 상속 받는다.
1) allowedTrailerHeaders
2) compressibleMimeType
3) compression
4) compressionMinSize
5) maxCookieCount
6) maxHttpHeaderSize
7) maxHttpRequestHeaderSize
8) maxParameterCount
9) maxPostSize
10) maxSavePostSize
11) maxTrailerSize
12) noCompressionUserAgents
13) server
14) serverRemoveAppProvidedValues
[ 중첩 구성 요소 ]
- 중첩 구성요소 없음
[ 특수 기능 ]
- 중첩 구성요소 없음.
참고
- https://tomcat.apache.org/tomcat-11.0-doc/config/http2.html
댓글
댓글 쓰기