TsgcWebSocketHTTPServer | HTTP/2 Server Push

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.

 

Server Push configureren

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.