HTTP arbeitet normalerweise mit einem Request/Response-Muster, bei dem der Client einen REQUEST für eine Ressource an den SERVER sendet und der SERVER eine RESPONSE mit der angeforderten Ressource oder einem Fehler sendet. Normalerweise stellt der Client, etwa ein Browser, eine Reihe von Requests für Assets, die vom Server bereitgestellt werden.

Das Hauptproblem bei diesem Ansatz besteht darin, dass der Client zuerst einen Request senden muss, um die Ressource abzurufen (zum Beispiel index.html), warten muss, bis der Server die Response sendet, den Inhalt lesen muss und dann alle anderen Requests stellen muss (zum Beispiel styles.css).
HTTP/2 Server Push versucht, dieses Problem zu lösen. Wenn der Client eine Datei anfordert und der Server feststellt, dass diese Datei zusätzliche Dateien benötigt, werden diese Dateien automatisch an den Client GEPUSHT.

Im obigen Screenshot fordert der Client zuerst index.html an. Der Server liest diese Anfrage und sendet 2 Dateien als Antwort: index.html und styles.css, wodurch eine zweite Anfrage zum Abrufen von styles.css vermieden wird.
Gemäß den obigen Screenshots können Sie Ihren Server so konfigurieren, dass jedes Mal, wenn es eine neue Anfrage für die Datei /index.html gibt, der Server index.html und styles.css sendet.
Verwenden Sie die Methode PushPromiseAddPreLoadLinks, um jede Anfrage mit einer Push-Promise-Liste zu verknüpfen.
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;
Mit dem Chrome-Entwicklertool können Sie sehen, wie die Datei styles.css an den Client gepusht wird.
