TsgcWebSocketHTTPServer | HTTP/2 Server Push

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.

 

Server Push'u Yapılandı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.