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).

Ffc5102ee85d0d7ec57200fa3e6b1fce?s=128

Rafael Rinaldi

June 18, 2015
Tweet

Transcript

  1. 10.

    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. 11.

    λ 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. 12.

    λ 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. 13.
  5. 14.
  6. 19.
  7. 20.
  8. 21.
  9. 22.
  10. 23.
  11. 25.
  12. 27.

    ›❯ Conexões persistentes e reutilizáveis; ›❯ Transferência de dados em

    blocos; ›❯ Processamento paralelo de requests; ›❯ Mecanismos de cache mais inteligentes.
  13. 35.

    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)
  14. 36.

    λ 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 }
  15. 37.

    ›❯ Diminuição do uso de memória e CPU; ›❯ Reduz

    congestionamento na rede; ›❯ Reduz latência dos requests posteriores.
  16. 42.

    Uma forma de enviar um request enquanto se aguarda a

    resposta do anterior (processo síncrono)
  17. 44.
  18. 50.

    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)
  19. 51.

    Criar novos host names com o objetivo de aumentar o

    número de conexões (diminuindo tempo de carregamento)
  20. 52.
  21. 55.

    ›❯ Concatenação e minificação de arquivos; ›❯ Utilização de sprites

    para imagens; ›❯ Inline de recursos; ›❯ Compressão de imagens.
  22. 59.

    ›❯ 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.
  23. 60.
  24. 63.
  25. 65.

    Prova de conceito do Google de que a otimização na

    camada de protocolo era algo positivo e factível
  26. 67.

    ›❯ 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.
  27. 68.
  28. 69.
  29. 78.

    Apenas informações do header que mudam entre requisições são enviadas

    (User-Agent, por exemplo, só é enviado uma única vez)
  30. 81.
  31. 82.
  32. 84.
  33. 94.

    Browser tem a capacidade de manipular a prioridade de carregamento

    com o intuito de otimizar a renderização da página
  34. 98.

    <!DOCTYPE html> <html lang="en"> <head> <style> .inline-css { // ...

    } </style> <script> function inlineScript() { // ... } </script> </head> <body> </body> </html>
  35. 101.
  36. 102.
  37. 104.

    Temos nisso a oportunidade de se pensar em plugins e

    extensões que podem implementar tipos próprios
  38. 106.
  39. 107.

    Um dos problemas de se fazer mudanças no protocolo principal

    da web é de como será a adoção e a evolução disso
  40. 108.

    Muito da forma como o controle de tráfego de rede

    funciona foi alterada e isso tem potencial para causar problemas
  41. 109.
  42. 110.
  43. 113.

    A necessidade de se usar SSL com HTTP/2 é uma

    forma de contornar isso. (Criptografia vem de brinde)
  44. 115.

    Com o TLS/SSL o servidor consegue negociar o uso do

    novo protocolo sem quebrar middle boxes
  45. 118.

    ›❯ 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.
  46. 119.
  47. 122.

    ›❯ 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.
  48. 123.