SPDY, HTTP2 e por que você deveria conhecê-los

Todos os dias, uma quantidade absurda de páginas, arquivos e e-mails trafegam pela Internet. Essas informações podem ser transmitidas de forma segura graças à padronização da forma de transmissão dessas informações, ou seja, meu computador sabe exatamente como conversar com o servidor do blog da Caelum para pegar um post ou como conversar com meu servidor de e-mail para enviar uma mensagem para um amigo. A essas padronizações chamamos de protocolos, e um dos mais usados na Internet é o HTTP (HyperText Transfer Protocol ou Protocolo de Transferência de Hipertexto).

spdy browser_2

O protocolo HTTP é o protocolo usado pelo seu navegador para acessar os sites do seu dia-a-dia. Ele tem uma variante que adiciona criptografia à comunicação com o servidor, o HTTPS. Você pode conferir isso olhando o endereço que você está acessando: ele deve começar com http (ou https, se você estiver num site seguro). Esse protocolo começou a surgir junto com a popularização da Internet, no início da década de 1990. Desde então, passou por algumas modificações até chegar na versão atual: 1.1.

O problema é que a versão atual do HTTP não é tão atual assim: ela é de 1999. Desde então, a forma como utilizamos a Internet mudou bastante: sites mais elaborados, dispositivos móveis, banda larga… Por outro lado, o protocolo continua o mesmo. Com essas mudanças na forma de uso, o protocolo HTTP começou a se tornar um gargalo no desempenho dos sites.

A Google, uma empresa sempre muito preocupada com o desempenho de seus serviços, decidiu atacar os problemas do HTTP desenvolvendo seu próprio protocolo, o SPDY. Esse protocolo, na verdade, pode ser visto como uma camada a mais no protocolo HTTP, pois as ideias originais do protocolo HTTP (cabeçalhos, métodos etc.) continuam valendo da mesma forma que antes. O que muda é que, agora, esses cabeçalhos e todos os dados são transmitidos obrigatoriamente compactados e criptografados. Além disso, uma mesma conexão pode ser aproveitada para a transmissão de diversas requisições ao mesmo tempo, um recurso conhecido como multiplexação. Usando esses recursos, o tempo de carregamento de sua página pode cair mais de 40%, dependendo da situação, sendo que os maiores ganhos são registrados em conexões piores, onde qualquer ganho é bastante perceptível para o usuário. Vale notar, então, que, por ser apenas uma camada a mais sob o HTTP, sua aplicação não precisa mudar para que você comece a trabalhar com SPDY.

O protocolo SPDY vem evoluindo e ganhando suporte por parte dos servidores e navegadores. A versão mais recente do protocolo, 3.1, é suportada apenas pelos navegadores Chrome e Opera, mas o Firefox a suportará a partir da próxima versão (27). No entanto, a versão anterior (versão 3) é suportada pelo Internet Explorer 11 e pelo Firefox desde a versão 15. O protocolo também é suportado pelas versões móveis desses navegadores e pelo navegador padrão do Android desde a versão 3.0 do sistema. Nos navegadores em que não há suporte, a conexão é feita via HTTPS, ou seja, o usuário continua tendo acesso normal ao site. Do lado dos servidores, existe um módulo para o Apache httpd que ativa suporte ao protocolo: o mod_spdy; o servidor nginx também tem suporte à versão 3.1 do protocolo desde sua versão 1.5.10, sem necessidade de plugins. Além disso, existe uma implementação de um servidor em Ruby, uma implementação para o Node.js e, no mundo Java, o servidor Jetty já suporta o protocolo nas versões mais recentes e o Tomcat já conta com um suporte experimental em sua versão 8.

Vale notar ainda que alguns serviços muito utilizados por todos, como o Google, o Facebook e o Twitter, já usam o protocolo SPDY. Além disso, se sua aplicação está hospedada no Google App Engine e tem um certificado SSL, ela já está usando SPDY!

O protocolo SPDY vem demonstrando ótimos resultados e, por isso, está servindo como base para uma grande atualização do próprio protocolo HTTP. A especificação do protocolo HTTP/2.0 já está no seu nono rascunho (que conta com diversas implementações) e a versão final é prevista ainda para esse ano. Com a padronização dessas alterações no protocolo HTTP, a tendência é que vejamos sites carregando cada vez mais rápido nos próximos anos, independente da banda disponível crescer.

Em abril, na QCon SP desse ano, Sérgio Lopes e eu falaremos mais a respeito do impacto que o SPDY e o HTTP2 trarão no desempenho do seu site e como tirar melhor proveito das novidades trazidas por esses protocolos. Não perca!

8 Comentários

  1. Roberto Shizuo 25/02/2014 at 15:52 #

    o spdy realmente está já em todo lugar. tomara que o http2 saia logo!

  2. Rafael 26/02/2014 at 10:00 #

    Só corrigindo o nginx tem suporte a versão 3.1 desde a 1.5.10 de 04/02/2014!

  3. Luiz Corte Real 14/04/2014 at 11:43 #

    Opa, Rafael! Obrigado, vou atualizar o texto! É que, apesar de o post ter sido publicado no dia 25, escrevi o texto antes e ainda não tinha saído essa versão. Agora ficou muito fácil testar o SPDY no nginx!

  4. Silvio Luiz 15/07/2014 at 10:02 #

    São muito legais as perspectivas com a utilização do http2. No fim das contas ele é uma extensão ao http 1.1 mas fiquei na dúvida, caso eu crie uma aplicação cujo meu servidor seja uma implementação do http2, toda chamada do lado cliente explicitamente tem que requerer o http2, ou existe algum fallback pra que seja detectado o suporte ao protocolo pelos browsers/apis/etc e se use o protocolo suportado ? Se eu requisitar algo como http 1.1 pra um serviço http 2 o serviço vai se comportar como http 1.1 ?

  5. Benedito 13/05/2015 at 14:16 #

    O facebook esta usando e tá horrível uma droga cheio de bug

  6. Sérgio Lopes 14/05/2015 at 14:14 #

    Bug do protocolo? Acho que não

  7. Bruno Dulcetti 14/06/2016 at 14:19 #

    Ele entrega como HTTPs quando não tem suporte? Não teria como entregar HTTP?

    Abs e vamos aguardar S2

Deixe uma resposta