TsgcWebSocketHTTPServer | HTTP/2 Server Push

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.

 

Configurar Server Push

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.