Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Dissecando o protocolo HTTP/2.0

Dissecando o protocolo HTTP/2.0

A ideia dessa talk é mostrar uma visão geral sobre o protocolo HTTP/2.0 e todas as suas features. Passo brevemente por um histórico do protocolo, falo brevemente sobre a suíte TCP/IP, SPDY e de como essa nova versão do protocolo vai mudar o workflow dos desenvolvedores (tanto no lado do servidor quanto no client).

Rafael Rinaldi

June 18, 2015
Tweet

More Decks by Rafael Rinaldi

Other Decks in Technology

Transcript

  1. 1. Client se conecta ao host; 2. Servidor aceita a

    conexão; 3. Client faz requisição de um arquivo; 4. Servidor envia uma resposta.
  2. λ http -v server.com GET / HTTP/1.1 Accept: */* Accept-Encoding:

    gzip, deflate Connection: keep-alive Host: server.com User-Agent: HTTPie/0.9.2
  3. λ http server.com HTTP/1.1 301 Moved Permanently Accept-Ranges: bytes Age:

    887 Connection: keep-alive Content-Encoding: gzip Content-Length: 298 Content-Type: text/html; charset=iso-8859-1 Date: Thu, 05 Mar 2015 03:24:18 GMT Location: http://www.server.com Server: Apache/2.2.22 (Debian) PHP/5.3.3-7+squeeze25 with OpenSSL/0.9.8o Usou: Cache Vary: Accept-Encoding Via: 1.1 varnish X-Varnish: 180850535 180830146 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html>…</html>
  4. ›❯ Conexões persistentes e reutilizáveis; ›❯ Transferência de dados em

    blocos; ›❯ Processamento paralelo de requests; ›❯ Mecanismos de cache mais inteligentes.
  5. Reutilizar uma única conexão TCP para enviar e receber múltiplos

    requests (ao invés de abrir uma nova conexão para cada request)
  6. λ http PUT server.com foo=bar HTTP/1.1 200 OK Connection: keep-alive

    Content-Length: 332 Content-Type: application/json Date: Thu, 05 Mar 2015 03:24:18 GMT Location: http://www.server.com Server: Apache/2.2.22 (Debian) PHP/5.3.3-7+squeeze25 with OpenSSL/0.9.8o { isSuccess: true }
  7. ›❯ Diminuição do uso de memória e CPU; ›❯ Reduz

    congestionamento na rede; ›❯ Reduz latência dos requests posteriores.
  8. Uma forma de enviar um request enquanto se aguarda a

    resposta do anterior (processo síncrono)
  9. O HTTP/1.1 nos permite apenas abrir de 6 a 8

    conexões por origem (a primeira spec tinha uma limitação de apenas 2)
  10. Criar novos host names com o objetivo de aumentar o

    número de conexões (diminuindo tempo de carregamento)
  11. ›❯ Concatenação e minificação de arquivos; ›❯ Utilização de sprites

    para imagens; ›❯ Inline de recursos; ›❯ Compressão de imagens.
  12. ›❯ Reduzir lookup de DNS; ›❯ Reduzir número de requests;

    ›❯ Servir recursos através de uma CDN; ›❯ Adicionar “Expires header”; ›❯ Compressão GZIP em arquivos baseados em texto; ›❯ Evitar redirecionamento de URL.
  13. Prova de conceito do Google de que a otimização na

    camada de protocolo era algo positivo e factível
  14. ›❯ Compressão de header via zlib; ›❯ Depende de conexão

    segura para funcionar (HTTPS); ›❯ Adotado pela grande maioria dos navegadores modernos; ›❯ Suporte via módulos para web servers populares; ›❯ Introduziu muitos conceitos de melhoria de performance.
  15. Apenas informações do header que mudam entre requisições são enviadas

    (User-Agent, por exemplo, só é enviado uma única vez)
  16. Browser tem a capacidade de manipular a prioridade de carregamento

    com o intuito de otimizar a renderização da página
  17. <!DOCTYPE html> <html lang="en"> <head> <style> .inline-css { // ...

    } </style> <script> function inlineScript() { // ... } </script> </head> <body> </body> </html>
  18. Temos nisso a oportunidade de se pensar em plugins e

    extensões que podem implementar tipos próprios
  19. Um dos problemas de se fazer mudanças no protocolo principal

    da web é de como será a adoção e a evolução disso
  20. Muito da forma como o controle de tráfego de rede

    funciona foi alterada e isso tem potencial para causar problemas
  21. A necessidade de se usar SSL com HTTP/2 é uma

    forma de contornar isso. (Criptografia vem de brinde)
  22. Com o TLS/SSL o servidor consegue negociar o uso do

    novo protocolo sem quebrar middle boxes
  23. ›❯ Continue minificando JS, CSS; ›❯ Continue comprimindo imagens; ›❯

    GZIP automático; ›❯ Mate bundles de arquivos; ›❯ ES6 modules + HTTP/2 = ❤; ›❯ Server push substitui inline de recursos sem gambiarra; ›❯ Sem necessidade de múltiplos hostnames; ›❯ Cookies em servidores estáticos não são mais problema.
  24. ›❯ Não use componentes de carrossel; ›❯ É bolacha, não

    biscoito! ›❯ HTTP/2 é bacon/donut (e não é do Google); ›❯ Brinks com seu servidor HTTP/2 (Node.js, Go, Ruby); ›❯ Servidores mais inteligentes; ›❯ Módulos experimentais para Apache e Nginx; ›❯ Utilize SPDY/HTTP/2 hoje! Pela ciência! ›❯ Acompanhar progresso do QUIC.