TsgcHTTP3Server › Eigenschaften › H3Settings
HTTP/3-Protokolleinstellungen, die Peers im SETTINGS-Frame angekündigt werden.
property H3Settings: TsgcHTTP3ServerSettings;
TsgcHTTP3ServerSettings
— (ein Unterobjekt, das mit der Komponente erstellt wird; siehe die Standardwerte der Member weiter unten)
H3Settings enthält die HTTP/3-Verbindungsparameter, die der Server jedem Client in seinem SETTINGS-Frame auf dem Control-Stream bekannt gibt (RFC 9114 Abschnitt 7.2.4). Eine Zuweisung an H3Settings kopiert die Member des Quellobjekts, statt das Objekt zu ersetzen, sodass die Referenz auf das Unterobjekt gültig bleibt.
Das Objekt hat zwei Mitglieder: ein verschachteltes Settings-Objekt, das die Werte trägt, die tatsächlich im SETTINGS-Frame übertragen werden, und MaxConcurrentStreams.
| Member | Typ | Hinweise | Beschreibung |
|---|---|---|---|
Settings | TsgcHTTP3Settings | — | Die Parameter des SETTINGS-Frames, die im Folgenden ausführlich beschrieben werden. Dasselbe Objekt ist auch über die Verknüpfung Settings an der Komponente erreichbar. |
MaxConcurrentStreams | Integer | 100 | Beabsichtigte maximale Anzahl gleichzeitiger Anfrage-Streams pro Verbindung. |
| Member | Typ | Hinweise | Beschreibung |
|---|---|---|---|
QPACKMaxTableCapacity | Int64 | 0 | SETTINGS_QPACK_MAX_TABLE_CAPACITY. Maximale Größe in Bytes der dynamischen QPACK-Tabelle, die ein Client beim Komprimieren der an diesen Server gesendeten Header-Felder verwenden darf. 0 bedeutet, dass der Client die dynamische Tabelle nicht verwenden darf, Anfragen werden dann nur gegen die statische Tabelle kodiert. Der Wert begrenzt auch die Decoder-Kapazität des Servers selbst. |
MaxFieldSectionSize | Int64 | 0 | SETTINGS_MAX_FIELD_SECTION_SIZE. Maximale Größe einer Header-Feld-Sektion in Bytes, die der Server akzeptiert. 0 bedeutet unbegrenzt. Ein Wert ungleich null wird auch als eingehendes Limit durchgesetzt: Ein HEADERS-Frame, das eine größere Länge angibt, wird abgelehnt, bevor seine Payload gepuffert wird. |
QPACKBlockedStreams | Int64 | 0 | SETTINGS_QPACK_BLOCKED_STREAMS. Anzahl der Anfrage-Streams, die der Encoder des Clients blockiert lassen darf, während er auf Aktualisierungen der dynamischen QPACK-Tabelle wartet. |
EnableConnectProtocol | Boolean | False | SETTINGS_ENABLE_CONNECT_PROTOCOL (RFC 9220 / RFC 8441). Setzen Sie es auf True, um Clients mitzuteilen, dass sie ein Extended CONNECT senden dürfen, also ein CONNECT, das einen :protocol-Pseudo-Header trägt. Das Aktivieren von WebTransport kündigt dies automatisch an. |
EnableDatagram | Boolean | False | SETTINGS_H3_DATAGRAM (RFC 9297). Lesen Sie den Datagramm-Hinweis unten, bevor Sie sich darauf verlassen. |
WebTransportMaxSessions | Int64 | 0 | SETTINGS_WEBTRANSPORT_MAX_SESSIONS. Anzahl der gleichzeitigen WebTransport-Sitzungen, die der Server akzeptiert. 0 deaktiviert WebTransport. Jeder Wert größer als null aktiviert es, veranlasst den Server, zusätzlich SETTINGS_ENABLE_CONNECT_PROTOCOL und SETTINGS_H3_DATAGRAM anzukündigen, und lässt OnWebTransportSession auslösen. |
Die Standardwerte sind eher konservativ als optimiert: Die QPACK-Komprimierung der dynamischen Tabelle und das Limit für den Feldabschnitt sind zunächst ausgeschaltet, was gültiges HTTP/3 ist und mit jedem Client zusammenarbeitet. Erhöhen Sie QPACKMaxTableCapacity, damit Clients wiederholte Header komprimieren können, und setzen Sie MaxFieldSectionSize, um zu begrenzen, wie groß ein Header-Abschnitt sein darf, den ein Peer sendet.
Die Einstellungen werden beim Aufbau einer Verbindung gelesen und einmalig auf dem Control-Stream gesendet, daher wirken sich Änderungen nur auf neue Verbindungen aus. Weisen Sie sie vor Start zu.
Hinweis zu Datagrammen. Das Ankündigen von EnableDatagram macht Datagramme nicht zustellbar. Die QUIC-Engine in OpenSSL implementiert die DATAGRAM-Erweiterung aus RFC 9221 nicht, daher kann kein WebTransport-Datagramm auf die Leitung gelegt werden, und TsgcWebTransportSession.SendDatagram löst TsgcQUICException aus, statt die Payload zu verlieren. Siehe SendDatagram. WebTransport-Streams sind nicht betroffen.
Warum SETTINGS_H3_DATAGRAM dennoch angekündigt wird. Wenn WebTransportMaxSessions über null gesetzt wird, kündigt der Server SETTINGS_H3_DATAGRAM an, obwohl Datagramme wirkungslos sind, und das ist Absicht und kein Versehen. Der Entwurf WebTransport over HTTP/3 verlangt, dass die Einstellung vorhanden ist, und Browser weigern sich, ohne sie eine WebTransport-Sitzung aufzubauen. Der Server kündigt sie an, damit diese Clients zusammenarbeiten und die Stream-Hälfte von WebTransport funktioniert, also die Hälfte, die hier die Daten transportiert. Ein Peer, der die Einstellung für bare Münze nimmt und dem Server ein Datagramm sendet, erhält schlicht keine Antwort, da nichts eines an die Sitzung zustellen kann.
WebTransportMaxSessions und das damit aktivierte Verhalten erfordern das bedingte Define SGC_WEBTRANSPORT.
// let clients use a 4 KB QPACK dynamic table and cap header sections at 64 KB
oServer.H3Settings.Settings.QPACKMaxTableCapacity := 4096;
oServer.H3Settings.Settings.MaxFieldSectionSize := 65536;
oServer.H3Settings.MaxConcurrentStreams := 200;
oServer.Start;