O HTTP geralmente funciona com um padrão de Requisição/Resposta, onde o cliente envia uma REQUEST por um recurso ao SERVER, e o SERVER envia uma RESPONSE com o recurso solicitado ou um erro. Normalmente o cliente, como um navegador, faz uma série de requisições por recursos que são fornecidos pelo servidor.

O principal problema com essa abordagem é que o cliente deve primeiro enviar uma requisição para obter o recurso (por exemplo, index.html), aguardar até que o servidor envie a resposta, ler o conteúdo e então fazer todas as outras requisições (por exemplo, styles.css).
O server push do HTTP/2 tenta resolver esse problema. Quando o cliente requisita um arquivo, se o servidor determinar que esse arquivo requer arquivos adicionais, esses arquivos serão ENVIADOS (PUSHED) automaticamente ao cliente.

Na captura de tela acima, o cliente primeiro requisita index.html. O servidor lê esta requisição e envia 2 arquivos como resposta: index.html e styles.css, evitando assim uma segunda requisição para obter styles.css.
Seguindo as capturas de tela acima, você pode configurar seu servidor para que, toda vez que houver uma nova requisição para o arquivo /index.html, o servidor envie index.html e styles.css.
Use o método PushPromiseAddPreLoadLinks para associar cada requisição a uma lista de push promise.
server := TsgcWebSocketHTTPServer.Create(nil);
oLinks := TStringList.Create;
Try
oLinks.Add('/styles.css');
server.PushPromiseAddPreLoadLinks('/index.html', oLinks);
Finally
oLinks.Free;
End;
procedure OnCommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo:
TIdHTTPResponseInfo);
begin
if ARequestInfo.Document = '/index.html' then
begin
AResponseInfo.ContentText := '';
AResponseInfo.ContentType := 'text/html';
AResponseInfo.ResponseNo := 200;
end
else if ARequestInfo.Document = '/styles.css' then
begin
AResponseInfo.ContentText := '';
AResponseInfo.ContentType := 'text/css';
AResponseInfo.ResponseNo := 200;
end;
end;
Utilizando a ferramenta de desenvolvedor do Chrome, você pode ver como o arquivo styles.css é enviado ao cliente.
