TsgcWebSocketHTTPServer | Serwer Push HTTP/2

HTTP zazwyczaj działa w oparciu o wzorzec żądanie/odpowiedź, gdzie klient wysyła ŻĄDANIE zasobu do SERWERA, a SERWER odsyła ODPOWIEDŹ z żądanym zasobem lub komunikatem błędu. Zazwyczaj klient, np. przeglądarka, wysyła serię żądań o zasoby dostarczane przez serwer.

 

 

Głównym problemem tego podejścia jest to, że klient musi najpierw wysłać żądanie, aby pobrać zasób (na przykład index.html), poczekać na odpowiedź serwera, odczytać zawartość, a następnie wysłać wszystkie pozostałe żądania (na przykład styles.css).

 

HTTP/2 server push stara się rozwiązać ten problem. Gdy klient żąda pliku, a serwer stwierdzi, że plik ten wymaga dodatkowych zasobów, pliki te zostaną automatycznie przesłane (PUSH) do klienta.

 

 

Na powyższym zrzucie ekranu klient najpierw żąda pliku index.html. Serwer odczytuje to żądanie i wysyła 2 pliki jako odpowiedź: index.html i styles.css, unikając w ten sposób drugiego żądania o styles.css.

 

Konfiguracja Server Push

Zgodnie z powyższymi zrzutami ekranu, można skonfigurować serwer tak, aby przy każdym żądaniu pliku /index.html serwer wysyłał index.html i styles.css.

 

Należy użyć metody PushPromiseAddPreLoadLinks, aby skojarzyć każde żądanie z listą push promise.

 


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;

Korzystając z narzędzi deweloperskich Chrome, można sprawdzić, w jaki sposób plik styles.css jest przesyłany do klienta.