HTTP fonctionne généralement avec un modèle Requête/Réponse, où le client envoie une REQUÊTE pour une ressource au SERVEUR, et le SERVEUR envoie une RÉPONSE avec la ressource demandée ou une erreur. Habituellement, le client, tel qu'un navigateur, effectue une série de requêtes pour des ressources fournies par le serveur.

Le principal problème avec cette approche est que le client doit d'abord envoyer une requête pour obtenir la ressource (par exemple, index.html), attendre que le serveur envoie la réponse, lire le contenu, puis effectuer toutes les autres requêtes (par exemple, styles.css).
Le push serveur HTTP/2 tente de résoudre ce problème. Lorsque le client demande un fichier, si le serveur détermine que ce fichier nécessite des fichiers supplémentaires, ces fichiers seront automatiquement POUSSÉS vers le client.
Dans la capture d'écran ci-dessus, le client demande d'abord index.html. Le serveur lit cette requête et envoie 2 fichiers en réponse : index.html et styles.css, évitant ainsi une deuxième requête pour obtenir styles.css.
En suivant les captures d'écran ci-dessus, vous pouvez configurer votre serveur de sorte que chaque fois qu'il y a une nouvelle requête pour le fichier /index.html, le serveur enverra index.html et styles.css.
Utilisez la méthode PushPromiseAddPreLoadLinks pour associer chaque requête à une liste de promesses push.
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;
À l'aide de l'outil développeur Chrome, vous pouvez voir comment le fichier styles.css est transmis au client.