Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Biblioteca antiga spdy

Estou utilizando a versão v24.18.0 do nodejs e ele não aceita a biblioteca do spdy.

Por isso coloquei no conteúdo do arquivo server_http2.js as seguintes instruções.

const http2 = require('http2');
const fs = require('fs');
const path = require('path');

const server = http2.createSecureServer({
    key: fs.readFileSync('./server.key'),
    cert: fs.readFileSync('./server.crt')
});

server.on('error', (err) => console.error(err));

server.on('stream', (stream, headers) => {
    let reqPath = headers[':path'];
    
    if (reqPath === '/') {
        reqPath = '/index.html';
    }

    const filePath = path.join(__dirname, 'build', reqPath);

    fs.readFile(filePath, (err, data) => {
        if (err) {
            stream.respond({ ':status': 404, 'content-type': 'text/plain' });
            stream.end('Not Found');
            return;
        }

        let contentType = 'text/html';
        if (filePath.endsWith('.js')) contentType = 'application/javascript';
        else if (filePath.endsWith('.css')) contentType = 'text/css';
        else if (filePath.endsWith('.png')) contentType = 'image/png';
        else if (filePath.endsWith('.jpg') || filePath.endsWith('.jpeg')) contentType = 'image/jpeg';
        else if (filePath.endsWith('.json')) contentType = 'application/json';

        stream.respond({
            ':status': 200,
            'content-type': contentType
        });
        stream.end(data);
    });
});

server.listen(3002, '0.0.0.0', () => {
    console.log('Listening on port 3002 with Native HTTP/2');
});
1 resposta

Olá, Mário! Tudo bom?

Obrigado por nos trazer essa observação!

A boa notícia é que o Node.js já suporta HTTP/2 nativamente, então você não precisa mais usar o spdy para isso.

Você já configurou corretamente um servidor HTTP/2 usando o módulo nativo http2, o código que você postou está correto para criar um servidor seguro. Ainda assim, vou deixar algumas dicas para garantir que tudo funcione bem:

  1. Certificados SSL/TLS: Certifique-se de que os arquivos server.key e server.crt estão corretos e no mesmo diretório que seu script. Esses arquivos são essenciais para estabelecer uma conexão segura.
  2. Estrutura de Arquivos: Verifique se a estrutura de diretórios está correta e que a pasta build contém os arquivos que você deseja servir.
  3. Testes Locais: Quando testar localmente, ao acessar https://localhost:3002, você pode receber um aviso de segurança no navegador, pois o certificado não é de uma autoridade confiável. Isso é esperado em ambientes de desenvolvimento.
  4. Versão do Node.js: Certifique-se de que a versão do Node.js que você está usando realmente suporta o módulo http2. A partir da versão 8.4.0, o suporte ao HTTP/2 está disponível, mas é sempre bom verificar as notas de versão para confirmar.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!