Delphi HTTP/3 클라이언트 | QUIC & WebTransport 컴포넌트 | eSeGeCe

Delphi HTTP/3 클라이언트 — Pascal을 위한 QUIC과 WebTransport

Delphi 및 C++Builder를 위한 실제로 작동하는 HTTP/3 스택: TsgcHTTP3Client는 QPACK 헤더 압축, Alt-Svc 발견, 서버 푸시 및 Extended CONNECT 터널과 함께 QUIC 위에서 RFC 9114 요청을 전송해요. Raw QUIC 전송 컴포넌트와 WebTransport 세션이 같은 패키지에 들어 있고, HTTP/3 서버가 그림을 완성해요.

동일한 HTTP 시맨틱, 새로운 전송

HTTP/3 (RFC 9114)는 이미 알고 있는 메서드, 상태 코드, 헤더를 유지하면서 TCP를 QUIC으로 대체해요. QUIC은 TLS 1.3이 내장된 UDP 기반 전송이에요.

Delphi HTTP/3 클라이언트는 현대 웹이 이동하고 있는 전송을 애플리케이션에 제공해요. QUIC (RFC 9000)은 전송과 TLS 핸드셰이크를 단일 왕복으로 결합하고, 전송 수준 head-of-line 블로킹을 제거하며(손실된 패킷은 해당 데이터를 실은 스트림만 지연시켜요), 연결 ID를 통해 네트워크 변경에서도 살아남아 연결이 Wi-Fi에서 모바일 데이터로 이동하는 장치를 따라갈 수 있어요. 헤더는 HPACK의 HTTP/3 대체품인 QPACK (RFC 9204)으로 압축돼요.

sgcWebSockets는 OpenSSL 3.5의 네이티브 QUIC 지원을 통해 QUIC을 구동해요. 엔진은 OpenSSL 라이브러리가 로드될 때 자동으로 감지돼요: 함께 제공되는 OpenSSL 3.5 바이너리를 사용하면 연결당 다중 스트림을 지원하고 컴포넌트가 중심으로 설계된 qmBuiltin 엔진을 얻어요. quictls 스타일 OpenSSL 빌드를 위한 qmCustom 경로도 있으며, 연결당 단일 스트림으로 제한돼요.

HTTP/3 클라이언트

TsgcHTTP3Client: 블로킹 및 비동기 요청, Alt-Svc, 푸시, 터널

HTTP/3 서버

TsgcHTTP3Server: QUIC 위에서 요청을 처리, TsgcQUICServer에서 파생

Raw QUIC

TsgcQUICClient / TsgcQUICServer: HTTP 시맨틱 없는 QUIC 스트림

표준

RFC 9000 (QUIC), RFC 9114 (HTTP/3), RFC 9204 (QPACK), RFC 9220 (Extended CONNECT)

HTTP/3 클라이언트가 할 수 있는 것

10가지 HTTP 메서드에 더해, 이벤트와 메서드로 노출된 HTTP/3 전용 메커니즘.

모든 동사

GET, HEAD, POST, PUT, DELETE, PATCH, OPTIONS, TRACE, CONNECT 그리고 새로운 IETF QUERY 메서드까지, 각각 블로킹 호출로, 대부분은 비동기 변형도 함께 제공돼요.

Alt-Svc 발견

서버는 Alt-Svc 헤더 (RFC 7838)를 통해 HTTP/3 가용성을 알려요. 클라이언트가 이를 파싱하여 OnAltSvc를 통해 표면화하므로, 전환 시점은 애플리케이션이 결정해요.

서버 푸시

푸시된 응답의 제어권은 클라이언트에 있어요: SetMaxPushId로 한도를 알리고, OnPushPromise를 통해 알림을 받고, CancelPush로 거부하세요.

Extended CONNECT

RFC 9220은 요청 스트림을 통해 다른 프로토콜을 터널링해요. 서버가 지원을 알리면 ExtendedConnect가 터널을 열고, TunnelSendOnTunnelData가 바이트를 이동시켜요.

WebTransport

Extended CONNECT를 통해 협상되는 세션으로, 애플리케이션에 QUIC 스트림을 직접 넘겨줘요. 저지연 양방향 트래픽을 위해 설계됐어요. 스트림 기반이며, 데이터그램은 제공되는 QUIC 엔진에서 전달되지 않아요.

QPACK 압축

QUIC의 비순차 전달을 위해 설계된 RFC 9204 헤더 압축으로, 동적 테이블 업데이트가 전용 인코더 및 디코더 스트림으로 전달돼요.

0-RTT 지원 핸드셰이크

QUIC은 전송과 TLS 1.3을 한 번의 왕복으로 결합해요. 새 연결은 단일 라운드 트립으로 완료되고 재개된 세션은 첫 번째 전송에 0-RTT 데이터를 실을 수 있어요.

연결 마이그레이션

QUIC 연결은 주소 4-튜플이 아닌 연결 ID로 식별되므로, 클라이언트가 네트워크를 변경해도 살아남아요.

다중 스트림

빌트인 엔진에서 EnableMultiStreamOpenStream이 하나의 연결에 여러 독립 QUIC 스트림을 배치해요 — WebTransport가 구축되는 기반이에요.

HTTP/3를 통한 GET 요청

호스트와 포트에 연결한 다음 요청을 실행하세요. 기본 포트는 443이에요.

var
  oClient: TsgcHTTP3Client;
  vBody: string;
begin
  oClient := TsgcHTTP3Client.Create(nil);
  oClient.OnResponse := OnResponseHandler;
  oClient.OnAltSvc   := OnAltSvcHandler;

  oClient.Connect('www.example.com', 443);
  vBody := oClient.Get('https://www.example.com/');
  oClient.Disconnect;
end;
TsgcHTTP3Client* oClient = new TsgcHTTP3Client(NULL);
oClient->OnResponse = OnResponseHandler;
oClient->OnAltSvc   = OnAltSvcHandler;

oClient->Connect("www.example.com", 443);
String vBody = oClient->Get("https://www.example.com/");
oClient->Disconnect();
var oClient = new TsgcHTTP3Client();
oClient.OnResponse += OnResponseHandler;
oClient.OnAltSvc   += OnAltSvcHandler;

oClient.Connect("www.example.com", 443);
var vBody = oClient.Get("https://www.example.com/");
oClient.Disconnect();

Delphi로 만드는 HTTP/3 서버

서버는 UDP 포트를 바인딩하고, 인증서와 키를 로드하고, 모든 요청마다 이벤트를 발생시켜요. HTTP/3 지원은 라이브러리의 HTTP 서버 쪽에서도 사용할 수 있어요.

var
  oServer: TsgcHTTP3Server;
begin
  oServer := TsgcHTTP3Server.Create(nil);
  oServer.Port := 443;
  oServer.QUICOptions.SSLOptions.CertFile := 'cert.pem';
  oServer.QUICOptions.SSLOptions.KeyFile  := 'key.pem';
  oServer.OnH3Request := OnH3RequestHandler;
end;

에디션 및 런타임 요구 사항

HTTP/3, QUIC 및 WebTransport는 All-Access 에디션 전용이에요. 이 컴포넌트들은 Indy 기반 라이브러리 코어와 이들이 구축된 네이티브 QUIC 지원을 제공하는 OpenSSL 3.5 이상이 필요해요.

WebTransport는 추가로 빌트인 OpenSSL QUIC 엔진(qmBuiltin)이 필요해요. 세션이 하나의 QUIC 연결에서 여러 스트림을 필요로 하기 때문이에요. 서버 컴포넌트도 빌트인 엔진에서만 실행돼요. 클라이언트는 서버가 HTTP/3를 사용한다고 가정할 수 없으므로, h2만 알리는 오리진을 위해 HTTP/2 클라이언트를 가까이에 두세요. HTTP/3가 사용 가능해지면 Alt-Svc 이벤트가 알려줘요.

더 깊이 알아보기

Delphi HTTP/2 클라이언트 & 서버

TCP 기반 형제: 다중화 스트림, HPACK, 서버 푸시 및 WebSocket-over-HTTP/2.

HTTP 컴포넌트

전체 HTTP 제품군: HTTP/2, OAuth2, JWT, gRPC, 푸시 서비스 등.

Delphi 비교 가이드

sgcWebSockets가 다른 Delphi 네트워킹 라이브러리와 어떻게 비교되는지, 출처 인용과 함께.

WebSocket 컴포넌트

HTTP/3 및 QUIC (RFC 9220), HTTP/2 (RFC 8441), HTTP/1.1 (RFC 6455) 위의 WebSocket.

블로그: HTTP QUERY 메서드

HTTP/1.1, HTTP/2, HTTP/3 클라이언트 전반의 새로운 IETF 동사, 코드와 함께.

에디션

Standard부터 All-Access까지 각 sgcWebSockets 에디션에 포함된 것.

Best value: All-AccessEvery eSeGeCe product, Premium Support included, from €1,059/year.
See All-Access pricing

오늘 Delphi에서 HTTP/3를 시도해 보세요

체험판을 다운로드하고 자체 서버나 HTTP/3가 활성화된 모든 오리진에 대해 HTTP/3 클라이언트를 실행해 보세요.