HTTP/2 Server Push

A new feature has been added to Indy Servers, now Server Push is supported by sgcWebSockets library.

HTTP usually works with Request/Response pattern, where client REQUEST a resource to SERVER and SERVER sends a RESPONSE with the resource requested or an error. Usually the client, like a browser, makes a bunch of requests for those assets which are provided by the server.

The main problem of this approach is that first client must send a request to get the resource, example: index.html, wait till server sends the response, the client reads the content and then make all other requests, example: styles.css

HTTP/2 server push tries to solve this problem, when the client requests a file, if server thinks that this file needs another file/s, those files will be PUSHED to client automatically. 

In the prior screenshot, first client request index.html, server reads this request and sends as a response 2 files: index.html and styles.css, so it avoids a second request to get styles.css

Configure Server Push 

Following the prior screenshots, you can configure your server so every time there is a new request for /index.html file, server will send index.html and styles.css
Use the method PushPromiseAddPreLoadLinks, to associate every request to a push promise list. 
server := TsgcWebSocketHTTPServer.Create(nil);
oLinks := TStringList.Create;
  server.PushPromiseAddPreLoadLinks('/index.html', oLinks);

procedure OnCommandGet(AContext: TIdContext; ARequestInfo: TIdHTTPRequestInfo; AResponseInfo:
  if ARequestInfo.Document = '/index.html' then
    AResponseInfo.ContentText := '<html></html>';
    AResponseInfo.ContentType := 'text/html';
    AResponseInfo.ResponseNo := 200;
  else if ARequestInfo.Document = '/styles.css' then
    AResponseInfo.ContentText := '<style></style>';
    AResponseInfo.ContentType := 'text/css';
    AResponseInfo.ResponseNo := 200;

When the client request /index.html, automatically the server will send the 2 files, index.html and styles.css. You can check this behaviour using google chrome developer tools.

Stay Informed

When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.

FastMM4 vs FastMM5 vs FastMM4-AVX
File not found bplrtl270.dylib

Related Posts