HTTP werkt meestal met een Aanvraag/Antwoord-patroon, waarbij de client een AANVRAAG voor een bron naar de SERVER stuurt, en de SERVER een ANTWOORD stuurt met de gevraagde bron of een fout. Meestal doet de client, zoals een browser, een reeks aanvragen voor assets die door de server worden geleverd.

Het grootste probleem met deze aanpak is dat de client eerst een verzoek moet sturen om de resource op te halen (bijvoorbeeld index.html), moet wachten totdat de server het antwoord stuurt, de inhoud moet lezen en vervolgens alle andere verzoeken moet doen (bijvoorbeeld styles.css).
HTTP/2 server push probeert dit probleem op te lossen. Wanneer de client een bestand opvraagt en de server bepaalt dat dit bestand aanvullende bestanden vereist, worden die bestanden automatisch naar de client GEPUSHT.

In de bovenstaande schermafbeelding vraagt de client eerst index.html aan. De server leest dit verzoek en verzendt 2 bestanden als antwoord: index.html en styles.css, waardoor een tweede verzoek om styles.css te ophalen wordt vermeden.
Aan de hand van de bovenstaande schermafbeeldingen kunt u uw server zodanig configureren dat elke keer dat er een nieuw verzoek is voor het bestand /index.html, de server index.html en styles.css verzendt.
Gebruik de methode PushPromiseAddPreLoadLinks om elk verzoek te koppelen aan een lijst met push-promises.
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;
Using the Chrome developer tool, u kunt view how the styles.css file is pushed to de client.
