TsgcHTTP3Server › Metodi › SendPush
Invia un server push HTTP/3 (PUSH_PROMISE più una risposta inviata tramite push).
procedure SendPush(const aQUICConn: TsgcQUICServerConnection; aPushId: Int64; const aRequest: TsgcHTTP3Request; const aResponse: TsgcHTTP3Response);
| Nome | Tipo | Descrizione |
|---|---|---|
aQUICConn | const TsgcQUICServerConnection | Connessione QUIC su cui viene inviato il push. |
aPushId | Int64 | Push ID che identifica questo server push e lo stream di push unidirezionale che trasporta la risposta. |
aRequest | const TsgcHTTP3Request | Richiesta sintetica a cui risponde il push. I suoi Method, Scheme, Host (authority) e Path sono codificati come pseudo-header di richiesta del frame PUSH_PROMISE. |
aResponse | const TsgcHTTP3Response | Risposta consegnata sullo stream di push. Impostare StatusCode, ContentType, gli Headers facoltativi e il corpo Data prima della chiamata. |
SendPush scrive prima un frame PUSH_PROMISE sullo stream di richiesta contenente gli pseudo-header della richiesta, quindi apre uno stream di push unidirezionale (tipo di stream 0x01) preceduto dal Push ID e invia lì la risposta tramite SendResponse. Il server push consente al server di consegnare in modo proattivo una risorsa che il client non ha ancora richiesto.
Il client deve aver consentito i push annunciando un MAX_PUSH_ID diverso da zero; in caso contrario, o se il Push ID supera quel limite, il client scarta il push. Si noti che il server push HTTP/3 è deprecato nella maggior parte dei browser, quindi utilizzarlo solo con client sotto il proprio controllo.
oRequest := TsgcHTTP3Request.Create;
oResponse := TsgcHTTP3Response.Create;
try
oRequest.Scheme := 'https';
oRequest.Host := 'example.com';
oRequest.Path := '/style.css';
oResponse.StatusCode := 200;
oResponse.ContentType := 'text/css';
oResponse.Data := TEncoding.UTF8.GetBytes('body { margin: 0; }');
oServer.SendPush(aConnection, 0, oRequest, oResponse);
finally
oResponse.Free;
oRequest.Free;
end;