HTTP/2 Server

Obsługuj HTTP/2 (h2) obok HTTP/1.1 i WebSocket na jednym porcie TLS za pomocą TsgcWebSocketHTTPServer. Negocjacja ALPN, HPACK i multipleksowanie strumieni są wbudowane.

TsgcWebSocketHTTPServer

Ten sam TsgcWebSocketHTTPServer używany dla WebSocket i HTTP/1.1 obsługuje też HTTP/2 przez TLS — włącz Specifications.HTTP2, a ALPN zajmie się resztą.

Klasa komponentu

TsgcWebSocketHTTPServer

Protokół

HTTP/2 (RFC 9113)

Platformy

Windows, macOS, Linux, iOS, Android

Edycja

Professional / Enterprise

Włącz HTTP/2 jedną właściwością

Na instancji TsgcWebSocketHTTPServer włącz TLS i przełącz Specifications.HTTP2 — negocjacja ALPN h2 obsłuży ulepszenie automatycznie.

uses
  sgcWebSocket;

var
  Server: TsgcWebSocketHTTPServer;
begin
  Server := TsgcWebSocketHTTPServer.Create(nil);
  Server.Port := 443;
  Server.SSL  := True;
  Server.SSLOptions.CertFile := 'cert.pem';
  Server.SSLOptions.KeyFile  := 'key.pem';

  // Allow HTTP/1.1, HTTP/2 and WebSocket on the same port
  Server.Specifications.HTTP   := True;
  Server.Specifications.HTTP2  := True;
  Server.Specifications.RFC6455 := True;

  Server.OnCommandGet := procedure(AContext: TIdContext;
    ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo)
  begin
    AResponseInfo.ContentText := 'Hello over HTTP/' + IfThen(ARequestInfo.HTTP2, '2', '1.1');
  end;

  Server.Active := True;
end;
// uses: sgcWebSocket
TsgcWebSocketHTTPServer *Server = new TsgcWebSocketHTTPServer(this);
Server->Port = 443;
Server->SSL  = true;
Server->Specifications->HTTP2 = true;
Server->Active = true;

Co jest w środku

TsgcWebSocketHTTPServer z włączonym HTTP/2 — dziel jeden punkt końcowy TLS między HTTP/1.1, HTTP/2 i WebSocket.

Negocjacja ALPN

Podczas uścisku dłoni TLS serwer ogłasza zarówno http/1.1, jak i h2. Klient wybiera protokół; serwer kieruje ruchem odpowiednio — nie jest potrzebne osobne gniazdo nasłuchujące.

Współistnienie z WebSocket

Klienci WebSocket nadal wykonują ulepszenie przez ścieżkę HTTP/1.1. RFC 8441 (Bootstrapping WebSockets with HTTP/2) jest obsługiwany przez Specifications.RFC8441.

HPACK + ramkowanie strumieni

Wbudowany koder HPACK dla nagłówków odpowiedzi oraz rdzeń multipleksowania strumieni, który kieruje każde żądanie na własny stream-id, respektując wskazówki priorytetu.

Server push

Server push (PUSH_PROMISE) jest obsługiwany, ale jest już przestarzały — nowoczesne klienty go ignorują; zamiast tego rozważ 103 Early Hints lub HTTP/3.

Wybór TLS

Ustaw SSLOptions.IOHandler na iohOpenSSL (wieloplatformowy) lub iohSChannel (Windows). HTTP/2 wymaga TLS 1.2+ zgodnie z wdrożeniem RFC 7540 / 9113.

Metryki połączeń

Każde połączenie HTTP/2 udostępnia liczbę strumieni, szacunki RTT, łączne bajty przesłane/odebrane i parametry wynegocjowanej ramki SETTINGS przez OnHTTP2Settings.

Specyfikacje i odniesienia

Autorytatywne źródła protokołu implementowanego przez ten komponent.

Dokumentacja i dema

Przejdź bezpośrednio do dokumentacji komponentu, pobierz gotowy do uruchomienia projekt demonstracyjny i pobierz wersję próbną.

Pomoc online — TsgcWebSocketHTTPServer Pełna dokumentacja właściwości, metod i zdarzeń tego komponentu.
Projekt demonstracyjny — Demos\20.HTTP_Protocol\01.HTTP2_Server_And_Client Gotowy do uruchomienia projekt przykładowy. Dostarczany w pakiecie sgcWebSockets — pobierz wersję próbną poniżej.
Dokument techniczny (PDF) Funkcje, szybki start, przykłady kodu dla Delphi i C++ Builder oraz odniesienia do źródeł pierwotnych — tylko ten komponent.
Podręcznik użytkownika (PDF) Kompleksowy podręcznik obejmujący każdy komponent biblioteki.

Gotowy na obsługę HTTP/2 z Delphi?

Pobierz bezpłatną wersję próbną i obsługuj HTTP/1.1, HTTP/2 i WebSocket z jednego punktu końcowego TLS.