Acelere seu site com HTTP/2

http2 15 de Dez de 2016

foguete do HTTP/2

O HTTP/2 é a nova versão do protocolo HTTP que, por sua vez, é um dos 3 padrões originais que deram início à web, juntamente ao URI e o HTML. A última revisão do protocolo se deu há quase 20 anos, com a versão 1.1 presente no RFC 2068.

Mas em 1997, quando foi lançado, não existiam smartfones, APIs e muitos dos usos que fazemos da web hoje. Atualmente o HTTP firmou-se como o principal protocolo para transporte de dados sobre IP na Internet, algo muito além do objetivo para o qual ele foi projetado.

Muitas das técnicas utilizadas pelos desenvolvedores frontend hoje em dia, como a minificação e concatenação de JS e CSS, por exemplo, (para citar apenas uma) teve origem nas limitações do HTTP/1.1.

Mais velocidade para a Web

A versão 2.0 foi amplamente baseada no protocolo SPYD proposto pelo Google para acelerar o tempo de resposta de sites e serviços na web, tendo se tornado um padrão oficial do IETF em 2015. Algumas das principais características do HTTP/2 são:

  • multiplexação: o HTTP/1.1 exige que uma requisição seja satisfeita para que a seguinte possa iniciar. O HTTP/2 elimina esta necessidade, permitindo que requisições sejam servidas em paralelo e fora de ordem;
  • codificação binária: os dados e cabeçalhos são transmitidos utilizando-se um formato binário compacto e mais econômico do que o formato textual utilizado anteriormente;
  • compressão dos cabeçalhos: cabeçalhos são comprimidos utilizando-se o formato HPACK, criado especialmente para este fim;
  • server push: o servidor pode enviar dados que ele sabe que serão necessários ao cliente, mesmo antes deste solicitá-los;
  • priorização de dependências: o cliente pode criar uma árvore de dependências de acordo com aquilo que é mais importante para ele no momento da requisição e transmití-la para que o servidor priorize o envio dos assets.

Se você quiser saber mais sobre o HTTP/2, sugiro a leitura do livro HTTP2 Explained (disponível gratuitamente) e a excelente palestra que Rafael Rinaldi fez sobre o tema para o 17º Encontro Locaweb.

Suporte ao HTTP/2 nos principais servidores e navegadores

A nova versão do protocolo já é suportada na maioria dos servidores web mais utilizados.

A distribuição community do Nginx suporta HTTP/2 desde a versão 1.9.5. Já no Apache é possível conseguir o mesmo através do mod_http2 disponível da versão 2.4.17 em diante. E até o Windows trouxe o suporte para as versões 10 e Server 2016 Technical Preview.

Apesar da especificação RFC 7540 não exigir o uso de TLS, os times do Chrome e Firefox afirmaram que implementariam o protocolo apenas sobre TLS 1.2 ou superior. Por isso mesmo, para que você faça uso do HTTP/2, é preciso ter um domínio registrado e um certificado digital válido instalado. Se você não tiver um certificado digital, pode adquirir um gratuitamente através do Let's Encrypt.

Fique tranquilo, pois os servidores web são capazes de voltar a servir conteúdo em HTTP/1.1 caso alguém utilizando um navegador mais antigo acesse o seu site.

Instalação e configuração do HTTP/2 no Nginx

O primeiro passo é se certificar de que a distribuição Linux utilizada oferece um pacote do Nginx compatível com HTTP/2, ou seja 1.9.5. As últimas versões do Ubuntu e Fedora, que possuem ciclos de lançamentos mais curtos, já trazem versões compatíveis.

Caso este não seja o caso, sugiro a utilização do repositório oferecido pelos próprios desenvolvedores do Nginx. Há repositórios para todas as distribuições suportadas tanto no Cloud Server Pro, quanto no VPS Locaweb: Debian, Ubuntu, Fedora, CentOS e Suse: http://nginx.org/en/linux_packages.html.

O próximo passo é efetuar a instalação normalmente, através do gerenciador de pacotes da sua distro. No meu caso, foi necessário desinstalar os pacotes anteriores, por conta de um conflito na tentativa de sobrescrever um arquivo de configuração em /etc/default/nginx.

Feito isso, basta encontrar o arquivo de configuração do seu site (normalmente em /etc/nginx/nginx.conf) e habilitar a opção http2 na porta 443, como no exemplo abaixo:

server {
    listen 443 ssl http2 default_server;

    ssl_certificate    server.crt;
    ssl_certificate_key server.key;
    ...
}

Reinicie o serviço para que a atualização tenha efeito

Instalação e configuração do HTTP/2 no Apache

Caso a versão do Apache Web Server já traga o módulo mod_http2 as coisas serão muito mais simples. Do contrário, você provavelmente poderá habilitar o repositório backports do Debian/Ubuntu ou utilizar um PPA. Em último caso, você sempre pode compilar o módulo ou mesmo uma versão mais recente por conta própria.

Uma vez disponível, utilize o comando abaixo para carregar o módulo:

LoadModule http2_module modules/mod_http2.so

e adicione a diretiva h2 ao seu arquivo de configuração (normalmente em /etc/apache/apache.conf):

Protocols h2 http/1.1

Como o arquivo de configuração do Apache é um XML, dependendo da posição onde a diretiva é colocada, ela pode ser global ou afetar apenas um site específico:

Protocols http/1.1
<VirtualHost ...>
    ServerName teste.exemplo.com.br
    Protocols h2 http/1.1
</VirtualHost>

Depois de salvo é preciso reiniciar o serviço para que as alterações tenham efeito.

Teste se tudo funciona

Para testar se tudo está funcionando, é possível utilizar o serviço disponível em https://tools.keycdn.com/http2-test e se certificar de que a partir de agora seus usuários poderão navegar em seu site com muito mais velocidades sem que sejam necessários mais recursos de seu servidor.

Não deixe de nos contar os resultados que você obtiver com a mudança, seja um melhor posicionamento de SEO ou o relato positivo de seus clientes.

Marcadores