HTTP generalmente funciona con un patrón de solicitud/respuesta, donde el cliente envía una SOLICITUD de un recurso al SERVIDOR, y el SERVIDOR envía una RESPUESTA con el recurso solicitado o un error. Normalmente el cliente, como un navegador, realiza una serie de solicitudes de recursos que son proporcionados por el servidor.

El principal problema con este enfoque es que el cliente debe primero enviar una solicitud para obtener el recurso (por ejemplo, index.html), esperar hasta que el servidor envíe la respuesta, leer el contenido y luego realizar todas las demás solicitudes (por ejemplo, styles.css).
El push del servidor HTTP/2 intenta resolver este problema. Cuando el cliente solicita un archivo, si el servidor determina que dicho archivo requiere archivos adicionales, esos archivos se enviarán automáticamente al cliente mediante PUSH.

En la captura de pantalla anterior, el cliente primero solicita index.html. El servidor lee esta solicitud y envía 2 archivos como respuesta: index.html y styles.css, evitando así una segunda solicitud para obtener styles.css.
Siguiendo las capturas de pantalla anteriores, puede configurar su servidor de modo que cada vez que haya una nueva solicitud para el archivo /index.html, el servidor envíe index.html y styles.css.
Use el método PushPromiseAddPreLoadLinks para asociar cada solicitud con una 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;
Con la herramienta de desarrollador de Chrome puede ver cómo se envía el archivo styles.css al cliente.
