TsgcHTTP3Client는 QUIC를 통해 HTTP 요청을 보내고 동기식 및 비동기식 요청 메서드를 모두 지원하는 HTTP/3 클라이언트(RFC 9114)입니다.
TsgcHTTP3Client는 RFC 9114에 정의된 HTTP/3 클라이언트를 구현합니다. HTTP/3은 내장된 TLS 1.3을 가진 UDP 기반 전송인 QUIC을 통해 HTTP 요청과 응답을 전달하므로, 모든 요청이 head-of-line 블로킹 없이 암호화된 멀티플렉싱 연결을 통해 전송됩니다. 클라이언트는 OpenSSL 3.5 이상에서 제공하는 네이티브 QUIC 클라이언트를 기반으로 하므로 외부 HTTP/3 라이브러리가 필요 없습니다.
이 컴포넌트는 동기적으로(호출이 차단되고 응답 본문을 반환) 또는 비동기적으로(호출이 즉시 반환되고 응답이 OnResponse 이벤트에 전달) 요청을 전송할 수 있습니다.
동기 요청을 보내려면 아래 단계를 따르십시오:
1. TsgcHTTP3Client의 새 인스턴스를 만들고 서버의 Host와 Port를 설정합니다.
2. Connect를 호출하여 QUIC 연결을 열고, Get(응답 본문을 반환함)으로 요청을 보내고, 완료되면 Disconnect를 호출합니다. 예제:
oClient := TsgcHTTP3Client.Create(nil);
oClient.Host := 'www.example.com';
oClient.Port := 443;
oClient.Connect(oClient.Host, oClient.Port);
vResponse := oClient.Get('https://www.example.com/');
ShowMessage(vResponse);
oClient.Disconnect;
요청을 비동기적으로 보내려면 OnResponse 이벤트를 할당하고 GetAsync를 호출하십시오. 호출은 즉시 반환되고 응답은 이벤트로 전달됩니다. 예제:
oClient := TsgcHTTP3Client.Create(nil);
oClient.OnResponse := OnResponseEvent;
oClient.GetAsync('https://www.example.com/');
procedure OnResponseEvent(Sender: TObject; const Response: TsgcHTTP3Response);
begin
ShowMessage(Response.DataString);
end;
| Name | 설명 |
|---|---|
| Host | 클라이언트가 연결할 HTTP/3 서버의 IP 주소 또는 DNS 이름. |
| Port | HTTP/3(QUIC) 서버에 연결하는 데 사용되는 UDP 포트. |
| ConnectTimeout | 클라이언트가 QUIC 및 TLS 1.3 핸드셰이크가 완료되기를 기다리는 최대 시간(밀리초). |
| TLSOptions | QUIC 연결에서 사용하는 TLS 1.3 매개변수(인증서, 검증, ALPN)를 구성합니다. |
| Settings | 연결이 설정될 때 서버에 알려지는 HTTP/3 SETTINGS 매개변수입니다. |
| Name | 설명 |
|---|---|
| Connect | QUIC 연결을 열고 TLS 1.3 및 HTTP/3 핸드셰이크를 수행합니다. |
| Get | 동기 HTTP/3 GET 요청을 보내고 응답 본문을 반환합니다. |
| Post | 본문 페이로드가 포함된 동기 HTTP/3 POST 요청을 보냅니다. |
| GetAsync | 논블로킹 HTTP/3 GET을 보냅니다. 응답은 OnResponse에서 도착합니다. |
| Disconnect | HTTP/3(QUIC) 연결을 닫습니다. |
| Name | 설명 |
|---|---|
| OnResponse | 클라이언트가 서버로부터 전체 응답(상태, 헤더, 본문)을 수신할 때 발생합니다. |
| OnError | 요청 또는 연결 오류가 발생할 때 발생합니다. |
| OnConnect | HTTP/3 연결이 설정된 후에 발생합니다. |
| OnDisconnect | HTTP/3 연결이 닫힌 후 발생합니다. |
다음 예제는 HTTP/3 연결을 열고, GET 및 POST 요청을 보낸 후 연결을 닫습니다.
var
oClient: TsgcHTTP3Client;
vResponse: string;
begin
oClient := TsgcHTTP3Client.Create(nil);
try
oClient.Host := 'www.example.com';
oClient.Port := 443;
oClient.ConnectTimeout := 10000;
oClient.Connect(oClient.Host, oClient.Port);
if oClient.Connected then
begin
vResponse := oClient.Get('https://www.example.com/');
ShowMessage(vResponse);
vResponse := oClient.Post('https://www.example.com/api', 'name=value',
'application/x-www-form-urlencoded');
ShowMessage(vResponse);
end;
oClient.Disconnect;
finally
oClient.Free;
end;
end;
SGC_HTTP3 조건부 정의를 활성화하여 컴파일하십시오.sgcHTTP3_Client 유닛을 추가하십시오.TLSOptions.IOHandler = iohOpenSSL(기본값)인 경우 기본 QUIC 클라이언트를 처음 제공한 OpenSSL 3.5 이상이 필요합니다. 이때 엔진은 OpenSSL이 로드될 때 감지되며, 내장 OpenSSL QUIC 엔진을 먼저 시도하고 sgc QUIC 엔진을 대체 경로로 사용합니다. TLSOptions.IOHandler = iohNativeTLS이면 sgc 엔진, 네이티브 TLS 1.3 핸드셰이크, 네이티브 패킷 보호가 사용되며 OpenSSL이 로드되지 않습니다. sgc 엔진은 HTTP/3 제어 스트림과 QPACK 스트림도 열며 이후 요청에서 하나의 QUIC 연결을 재사용합니다.