TsgcHTTP3Server › Ereignisse › OnH3Exception
Wird ausgelöst, wenn beim Bedienen einer HTTP/3-Verbindung eine unbehandelte Ausnahme auftritt.
property OnH3Exception: TsgcQUICServerExceptionEvent;
// TsgcQUICServerExceptionEvent = procedure(Sender: TObject; const aConnection: TsgcQUICServerConnection; const aException: Exception) of object
—
| Name | Typ | Beschreibung |
|---|---|---|
Sender | TObject | Die TsgcHTTP3Server-Instanz, die das Ereignis ausgelöst hat. |
aConnection | const TsgcQUICServerConnection | QUIC-Verbindung, bei der die Ausnahme ausgelöst wurde. Kann nil sein bei Fehlern, die nicht an eine einzelne Verbindung gebunden sind. In .NET ist dieser Parameter ein string, der den Peer-Endpunkt enthält, leer bei Fehlern auf Listener-Ebene. |
aException | Exception | Die abgefangene Ausnahme. Es handelt sich um eine TsgcHTTP3Exception, wenn eine HTTP/3-Konformitätsregel verletzt wurde, und ihre Eigenschaft ErrorCode enthält dann den HTTP/3-Fehlercode, der die Verbindung beendet hat. |
OnH3Exception wird ausgelöst, wenn eine Ausnahme auftritt, während der Server QUIC/HTTP/3-Verkehr für eine Verbindung verarbeitet, zum Beispiel während des Handshakes, beim Parsen von Frames, beim Verteilen der Anfrage oder beim Schreiben der Antwort. Die Behandlung des Ereignisses ermöglicht es der Anwendung, den Fehler zu protokollieren und den Server weiterlaufen zu lassen, da der Fehler auf die betroffene Verbindung beschränkt bleibt und nicht den Listener beendet.
Der nützlichste Fall ist eine Protokollverletzung durch den Peer. Wenn ein Client eine Regel von RFC 9114 verletzt, löst der Server eine TsgcHTTP3Exception mit dem HTTP/3-Fehlercode aus (zum Beispiel h3ecFRAME_UNEXPECTED oder h3ecMESSAGE_ERROR), die Verbindung wird mit diesem Code verworfen, und die Ausnahme erscheint hier, sodass der Grund beobachtbar ist. Wandeln Sie aException in TsgcHTTP3Exception um, um den Code zu lesen:
Beachten Sie, dass das Ereignis nicht jeden Fehler sieht. Ein fehlerhafter Peer-Stream, der keine Konformitätsverletzung darstellt, wird verschluckt, damit er den Server nicht zum Absturz bringen kann, und eine Ausnahme, die innerhalb eines OnH3TunnelData-Handlers ausgelöst wird, wird verworfen statt hier gemeldet.
Das Ereignis wird im Hintergrund-Listener-Thread des Servers ausgelöst, daher darf es die UI nicht direkt ansprechen. Lesen Sie aException.Message für die Fehlerdetails und verwenden Sie aConnection, um den Peer zu identifizieren, sofern er verfügbar ist.
procedure OnH3ExceptionEvent(Sender: TObject; const aConnection:
TsgcQUICServerConnection; const aException: Exception);
begin
if aException is TsgcHTTP3Exception then
Log('HTTP/3 protocol error, code ' +
IntToStr(GetH3ErrorCodeValue(TsgcHTTP3Exception(aException).ErrorCode)) +
': ' + aException.Message)
else
Log('HTTP/3 error: ' + aException.Message);
end;