TsgcHTTP3Server › Metody › SendPush
Wysyła wypychanie przez serwer HTTP/3 (PUSH_PROMISE wraz z wypchaną odpowiedzią).
procedure SendPush(const aQUICConn: TsgcQUICServerConnection; aPushId: Int64; const aRequest: TsgcHTTP3Request; const aResponse: TsgcHTTP3Response);
| Nazwa | Typ | Opis |
|---|---|---|
aQUICConn | const TsgcQUICServerConnection | Połączenie QUIC, przez które wysyłane jest wypychanie. |
aPushId | Int64 | Identyfikator push, który identyfikuje to wypychanie przez serwer i jednokierunkowy strumień push przenoszący odpowiedź. |
aRequest | const TsgcHTTP3Request | Syntetyczne żądanie, na które odpowiada wypychanie. Jego Method, Scheme, Host (authority) i Path są kodowane jako pseudo-nagłówki żądania ramki PUSH_PROMISE. |
aResponse | const TsgcHTTP3Response | Odpowiedź dostarczana przez strumień push. Przed wywołaniem ustaw StatusCode, ContentType, opcjonalne Headers i treść Data. |
SendPush najpierw zapisuje ramkę PUSH_PROMISE w strumieniu żądania zawierającą pseudonagłówki żądania, następnie otwiera jednostronny strumień wypychania (typ strumienia 0x01) poprzedzony identyfikatorem Push ID i wysyła tam odpowiedź przez SendResponse. Wypychanie przez serwer pozwala serwerowi proaktywnie dostarczyć zasób, którego klient jeszcze nie zażądał.
Klient musi zezwolić na wypychanie poprzez reklamowanie niezerowego MAX_PUSH_ID; jeśli tego nie zrobił lub jeśli Push ID przekracza ten limit, klient odrzuca wypychanie. Należy pamiętać, że wypychanie przez serwer HTTP/3 jest przestarzałe w większości przeglądarek, więc używaj go tylko z klientami, które kontrolujesz.
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;