TsgcHTTP3Client

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 이름.
PortHTTP/3(QUIC) 서버에 연결하는 데 사용되는 UDP 포트.
ConnectTimeout클라이언트가 QUIC 및 TLS 1.3 핸드셰이크가 완료되기를 기다리는 최대 시간(밀리초).
TLSOptionsQUIC 연결에서 사용하는 TLS 1.3 매개변수(인증서, 검증, ALPN)를 구성합니다.
Settings연결이 설정될 때 서버에 알려지는 HTTP/3 SETTINGS 매개변수입니다.

주요 메서드

Name설명
ConnectQUIC 연결을 열고 TLS 1.3 및 HTTP/3 핸드셰이크를 수행합니다.
Get동기 HTTP/3 GET 요청을 보내고 응답 본문을 반환합니다.
Post본문 페이로드가 포함된 동기 HTTP/3 POST 요청을 보냅니다.
GetAsync논블로킹 HTTP/3 GET을 보냅니다. 응답은 OnResponse에서 도착합니다.
DisconnectHTTP/3(QUIC) 연결을 닫습니다.

주요 이벤트

Name설명
OnResponse클라이언트가 서버로부터 전체 응답(상태, 헤더, 본문)을 수신할 때 발생합니다.
OnError요청 또는 연결 오류가 발생할 때 발생합니다.
OnConnectHTTP/3 연결이 설정된 후에 발생합니다.
OnDisconnectHTTP/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;

요구사항