HTTP genellikle bir İstek/Yanıt deseniyle çalışır; istemci SUNUCUYA bir kaynak için bir İSTEK gönderir ve SUNUCU, istenen kaynakla veya bir hatayla bir YANIT gönderir. Genellikle bir tarayıcı gibi bir istemci, sunucu tarafından sağlanan varlıklar için bir dizi istek yapar.

Bu yaklaşımın temel sorunu, istemcinin önce kaynağı (örneğin index.html) almak için bir istek göndermesi, sunucu yanıtı gönderene kadar beklemesi, içeriği okuması ve ardından diğer tüm istekleri (örneğin styles.css) yapması gerektiğidir.
HTTP/2 server push bu sorunu çözmeye çalışır. İstemci bir dosya talep ettiğinde, sunucu bu dosyanın ek dosyalar gerektirdiğini belirlerse, bu dosyalar istemciye otomatik olarak PUSH edilir.

Yukarıdaki ekran görüntüsünde, istemci önce index.html ister. Sunucu bu isteği okur ve yanıt olarak 2 dosya gönderir: index.html ve styles.css, böylece styles.css'i almak için ikinci bir istekten kaçınılır.
Yukarıdaki ekran görüntülerini takip ederek, sunucunuzu /index.html dosyası için her yeni istek olduğunda sunucu index.html ve styles.css gönderecek şekilde yapılandırabilirsiniz.
Her isteği bir push promise listesiyle ilişkilendirmek için PushPromiseAddPreLoadLinks yöntemini kullanın.
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;
Chrome geliştirici aracını kullanarak, styles.css dosyasının istemciye nasıl iletildiğini (push) görüntüleyebilirsiniz.
