TsgcHTTP3Server › Métodos › SendPush
Envia um server push HTTP/3 (PUSH_PROMISE mais uma resposta enviada pelo servidor).
procedure SendPush(const aQUICConn: TsgcQUICServerConnection; aPushId: Int64; const aRequest: TsgcHTTP3Request; const aResponse: TsgcHTTP3Response);
| Name | Type | Descrição |
|---|---|---|
aQUICConn | const TsgcQUICServerConnection | Conexão QUIC pela qual o push é enviado. |
aPushId | Int64 | ID de push que identifica este server push e o stream de push unidirecional que transporta a resposta. |
aRequest | const TsgcHTTP3Request | Requisição sintética à qual o push responde. Seus campos Method, Scheme, Host (authority) e Path são codificados como pseudo-cabeçalhos de requisição do frame PUSH_PROMISE. |
aResponse | const TsgcHTTP3Response | Resposta entregue no stream de push. Defina StatusCode, ContentType, Headers opcionais e o corpo Data antes de chamar. |
SendPush primeiro escreve um frame PUSH_PROMISE no stream de requisição carregando os pseudo-cabeçalhos de requisição, depois abre um stream de push unidirecional (tipo de stream 0x01) prefixado com o Push ID e envia a resposta ali por meio de SendResponse. O server push permite que o servidor entregue proativamente um recurso que o cliente ainda não solicitou.
O cliente deve ter permitido pushes anunciando um MAX_PUSH_ID diferente de zero; caso contrário, ou se o Push ID exceder esse limite, o cliente descarta o push. Observe que o server push do HTTP/3 está obsoleto na maioria dos navegadores, portanto use-o apenas com clientes que você controla.
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;