1

We are planning to implement http2 in a loopback 4 application. We had used http, socket servers but never http2.

What is the procedure to use http2 in my application?

user3170450
  • 375
  • 3
  • 20
  • https://stackoverflow.com/users/69868/miroslav-bajto%c5%a1 https://stackoverflow.com/users/5019371/rifa-achrinza is this even possible to do so?? – user3170450 Jul 04 '22 at 07:47

1 Answers1

1

Here's what you have to do in your existing app:

Step 1: Install spdy

npm i spdy

Step 2: Configure index.ts

Change your main function in src/index.ts with this:

import spdy from "spdy";

export async function main(options: ApplicationConfig = {}) {
  
  // specify cert and key file paths for SSL
  const serverOptions: spdy.ServerOptions = {
    key: fs.readFileSync(
      path.join(__dirname, '..', 'keys', 'localhost-privkey.pem'),
    ),
    cert: fs.readFileSync(
      path.join(__dirname, '..', 'keys', 'localhost-cert.pem'),
    ),
  };

  // setting listenOnStart to false will not start the default httpServer
  options.rest.listenOnStart = false;

  // Replace YourApplication with your class
  const app = new YourApplication(options);
  await app.boot();
  await app.start();

  // create server
  const server = spdy.createServer(serverOptions, app.requestHandler);

  // to avoid process exit on warnings
  server.on('warning', console.warn);

  server.listen(3000, () => {
    console.log('Listening on https://localhost:3000/');
  });

  return app;
}

All we're doing in the above code is, preventing the default http server from being started and starting the server using spdy with loopback's request handler app.requestHandler that will be used for all incoming request.

Check out this pastebin containing entire index.ts file content after the changes.

To generate certificate and keys for localhost use:

openssl req -x509 -newkey rsa:2048 -nodes -sha256 -subj '/CN=localhost' \
  -keyout localhost-privkey.pem -out localhost-cert.pem

You may need to allow self-signed certificates in Chrome as well for /explorer to work as expected.

And that's it, you can now run your app, and enjoy the power of http2 :)

Blog Post: https://shubham-web.medium.com/how-to-use-http2-in-loopback-4-applications-5e83881c7b38

Shubham P
  • 1,164
  • 4
  • 18