TsgcHTTP3Client › Ereignisse › OnHTTP3BeforeRequest
Wird ausgelöst, bevor eine Anfrage gesendet wird, sodass die Header-Liste überprüft oder geändert werden kann.
TsgcHTTP3BeforeRequestEvent = procedure(Sender: TObject;
var Headers: TStringList) of object;
property OnHTTP3BeforeRequest: TsgcHTTP3BeforeRequestEvent
read FOnHTTP3BeforeRequest write FOnHTTP3BeforeRequest;
| Name | Typ | Beschreibung |
|---|---|---|
Sender | TObject | Die TsgcHTTP3Client-Instanz, die das Ereignis ausgelöst hat. |
Headers | var TStringList | Die vollständige Header-Liste, die kodiert werden soll, einschließlich Pseudo-Header, als Name: Value-Zeilen. Ändern Sie sie direkt, um Header hinzuzufügen, zu ändern oder zu entfernen. |
OnHTTP3BeforeRequest wird bei jeder Anfrage ausgelöst, unmittelbar nachdem der Client die Header-Liste aufgebaut hat und bevor sie QPACK-kodiert und gesendet wird. Die Liste wird per Referenz übergeben und ist vollständig veränderbar, was dies zum einzigen Hook für alles Header-bezogene macht, für das es keine eigene Eigenschaft gibt.
Der übliche Grund, es zu behandeln, ist die Authentifizierung: Fügen Sie einen authorization-Header hinzu, der ein Bearer-Token oder Basic-Anmeldeinformationen trägt. Es eignet sich ebenso für Cookies, Korrelations-IDs, API-Schlüssel und jeden benutzerdefinierten Header, den Ihre API erwartet.
Die Liste enthält neben den gewöhnlichen Headern auch die HTTP/3-Pseudo-Header :method, :scheme, :authority und :path. Pseudo-Header müssen am Anfang des Abschnitts bleiben und dürfen nicht doppelt vorkommen, hängen Sie Ihre eigenen Header daher an, statt sie oben einzufügen, und entfernen Sie die Pseudo-Header nicht.
Header-Namen müssen in HTTP/3 kleingeschrieben sein (RFC 9114 Abschnitt 4.2). Ein Name in Großbuchstaben ist eine fehlerhafte Anfrage und der Server wird sie ablehnen.
Das Ereignis wird auf dem Thread ausgelöst, der die Anfrage sendet, bei einem Async-Verb also auf dem Hintergrund-Worker-Thread.
procedure TfrmMain.OnBeforeRequestEvent(Sender: TObject;
var Headers: TStringList);
begin
Headers.Add('authorization: Bearer ' + vToken);
Headers.Add('x-request-id: ' + vRequestId);
end;