rumo ao HTTP 2.0 o que vem por aí e o que você pode utilizar já com SPDY

Documentos relacionados
@sergio_caelum sergiolopes.org

HTTP. passado, presente e futuro.

OTIMIZAÇÃO DE MUNDO MOBILE PERFORMANCE WEB DESAFIOS DO

Programação para Internet I. 2. O protocolo HTTP. Nuno Miguel Gil Fonseca nuno.fonseca@estgoh.ipc.pt

Aulas Práticas. Implementação de um Proxy HTTP. O que é um proxy?

Programação para Internet Flávio de Oliveira Silva, M.Sc.

APLICAÇÕES E SERVIÇOS WEB

Internet e protocolos web. A Internet é uma rede descentralizada de recursos computacionais. Topologia tem de fornecer caminhos alternativos

Como se defender utilizando software livre na era da espionagem

Java Enterprise Edition. by Antonio Rodrigues Carvalho Neto

HyperText Transfer Protocol (HTTP)

Fernando M. V. Ramos, RC (LEI), TP02. HTTP. Redes de Computadores

Web. Até a década de 1990, a Internet era utilizada. por pesquisadores, acadêmicos e universitários, para troca de arquivos e para correio eletrônico.

Breve introdução a User Dir e Senhas no Apache Uma abordagem prática (aka crash course on User Dir and Directory Authentication on Apache)

Universidade Federal do Espírito Santo CCA UFES. Centro de Ciências Agrárias CCA UFES Departamento de Computação. Programação WEB

Redes de Computadores Grupo de Redes de Computadores

Universidade Federal de Mato Grosso

Capítulo 7. Hyper Text Transfer Protocol (HTTP). Serviço Apache. - Protocolo HTTP - Sessão HTTP - Configuração do serviço Apache

Ferramentas para Internet CST Sistemas para Internet

O protocolo HTTP. O que é o protocolo HTTP?

1.264 Lição 11. Fundamentos da Web

Hyper Text Transfer Protocol (HTTP) ADI HTTP 1/18

Desenvolvendo com Bootstrap 3: um framework front-end que vale a pena!

Desenvolvimento Web com JSP/Servlets

Conceitos de Ajax Exemplos de uso do Ajax no braço, muitos exemplos, muito código (HTML, CSS, JavaScript, PHP, XML, JSON)

Desenvolvimento Web Protocolos da Internet

PHP: Cookies e Sessões

Hypertext Transport Protocol (HTTP)

Aplicativos para Internet Aula 01

Redes de Computadores e a Internet

Comunicação entre Processos

JAVASCRIPT DE QUALIDADE HOJE, AMANHÃ E SEMPRE GUILHERME CARREIRO THIAGO OLIVEIRA

Web das Coisas WoT. Software: APIs para IoT. Prof. João Bosco Teixeira Junior

Programação Web Aula 1: Introdução

Patrick Augusto Gonçalves

Redes de Computadores

Redes de Computadores

Desenvolvimento Web Histórico da Internet e Protocolos

Garantindo disponibilidade, segurança e escalabilidade para aplicações. Eduardo Casseano ANG Sales Engineer

Tópicos de Ambiente Web Conceitos Fundamentais Redes de Dados

Práticas de Desenvolvimento de Software

Meu site Plone está lento. O que fazer? Fabiano Weimar dos Santos xiru@xiru.org

Java, HTTP, CGI e Linguagens de Scripting

WEBDESIGN. Professor: Paulo Trentin Escola CDI de Videira

Introdução à Tecnologia Web 2010 HTML HyperText Markup Language XHTML extensible HyperText Markup Language Elementos da Seção do Cabeçalho

Otimização de infraestrutura. de websites. Fabiano Weimar dos Santos

Redes de Computadores

NGiNX, o motor da sua aplicação Web. Ernani Azevedo

#Aula Nº 1 Introdução webstandards.samus.com.br Vinicius Fiorio Custódio samus@samus.com.br

Configurando o IIS no Server 2003

A Camada de Aplicação

O protocolo HTTP. Você aprenderá: O que é e como funciona o protocolo HTTP. Quais são as partes de um pedido HTTP.

Redes de Computadores

Fernando Bracalente. O trabalho final consiste em escolher um dos "malwares-novos" e responder algumas questões.

[Análise Performance Antiga Plataforma]

Redes de Computadores. Camada de Aplicação Profa. Priscila Solís Barreto

Guia para Criativos em HTML5 ABRIL

Cookies e sessões. HTTP é um protocolo que não mantém estado, isto é não tem memória.

INTRODUÇÃO A REDES DE COMPUTADORES. Alan Nakai

Desenvolvimento de Aplicações para Internet Aula 11

Wireshark. Captura de Protocolos da camada de aplicação. Maicon de Vargas Pereira

2Arquitetura cliente-servidor

CSS ETEC FRANCISCO MORATO. Professores: Kelly e Rafael

WWW, CGI e HTTP Java Deployment Course: Aula 2. por Jorge H. C. Fernandes (jhcf@di.ufpe.br) DI-UFPE 28 de Abril de 1999

REDES DE COMPUTADORES. Prof. Evandro Cantú

DWEB. Design para Web. CSS3 - Fundamentos. Curso Superior de Tecnologia em Design Gráfico

20/08/14 JAVA SERVLETS CONCEITOS CONTEÚDO ARQUITETURA DE UMA APLICAÇÃO WEB ARQUITETURA DA APLICAÇÃO WEB

Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas Prof. Felippe Scheidt IFPR Campus Foz do Iguaçu 2014/2

MELHORANDO O DESEMPENHO DO SEU WORDPRESS JULIAN FERNANDES TIAGO HILLEBRANDT

Material de apoio a aulas de Desenvolvimento Web. Tutorial Java WEB JSP & HTML & CSS & CLASSE & OBJETOS. AAS -

Input de dados a partir de formulários HTML

Web Design Aula 13: Introdução a CSS

PROGRAMAÇÃO PARA INTERNET HTML

Redes de Computadores I. Sockets e Arquitetura HTTP

Webstore Reloaded. A arquitetura do walmart.com.br remodelada

PROF. DANIELA PIRES. Aplicações para Web. Aplicações para Web - FMU Prof. Daniela Pires

SEO. Search Engine Optimization

HYPERTEXT TRANSFER PROTOCOL

Redes de Computadores Camada de Aplicação. Prof. MSc. Hugo Souza

História e Evolução da Web. Aécio Costa

HTML AULA 1 Prof. Daniela Pires XHTML HTML HEAD TITLE METAS TAG keywords description...

Mônica Oliveira Primo de Lima Edervan Soares Oliveira TRABALHO SOBRE PROTOCOLO HTTP

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ARMAZENAMENTO EM BD NO DM. Prof. Angelo Augusto Frozza, M.Sc.

UNIVERSIDADE FEDERAL DO ESTADO DO RIO DE JANEIRO ESCOLA DE INFORMÁTICA APLICADA CURSO DE BACHARELADO EM SISTEMAS DE INFORMAÇÃO

Desenvolvedor Web Docente André Luiz Silva de Moraes

Camada de aplicação. Camada de aplicação

Declaração do tipo de documento. Ana Cuper

Protocolo HTTP. Palavras-chave: Navegador, aplicativos, web, cliente, servidor.

Camada de Aplicação. Prof. Tiago Semprebom. 2: Camada de aplicação 1

Redes de Computadores I

TECNOLOGIAS WEB AULA 5 PROF. RAFAEL DIAS

Plataforma de vídeos UOLMais

Desenvolvimento de Sites com PHP e Mysql Docente André Luiz Silva de Moraes

MANUAL DE INTEGRAÇÃO Versão 1.0

Transcrição:

rumo ao HTTP 2.0 o que vem por aí e o que você pode utilizar já com SPDY

Luiz Corte Real @srsaude Sérgio Lopes @sergio_caelum

m a ç n la to n e

review HTTP em 5 slides

$ telnet www.caelum.com.br 80 Trying 64.233.171.121... Connected to ghs.googlehosted.com. Escape character is '^]'. GET / HTTP/1.1 Host: www.caelum.com.br HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 Vary: Accept-Encoding,User-Agent Content-Language: pt-br Date: Thu, 03 Apr 2014 18:37:18 GMT Server: Google Frontend Cache-Control: private <!DOCTYPE html><html><head><title>caelum</title>

$ telnet www.caelum.com.br 80 Trying 64.233.171.121... Connected to ghs.googlehosted.com. Escape character is '^]'. GET / HTTP/1.1 Host: www.caelum.com.br TEXTO HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 Vary: Accept-Encoding,User-Agent Content-Language: pt-br Date: Thu, 03 Apr 2014 18:37:18 GMT Server: Google Frontend Cache-Control: private <!DOCTYPE html><html><head><title>caelum</title>

$ telnet www.caelum.com.br 80 Trying 64.233.171.121... Connected to ghs.googlehosted.com. Escape character is '^]'. GET / HTTP/1.1 Host: www.caelum.com.br REQUEST HTTP/1.1 200 OK RESPONSE Content-Type: text/html; charset=utf-8 Vary: Accept-Encoding,User-Agent Content-Language: pt-br Date: Thu, 03 Apr 2014 18:37:18 GMT Server: Google Frontend Cache-Control: private <!DOCTYPE html><html><head><title>caelum</title>

$ telnet www.caelum.com.br 80 Trying 64.233.171.121... Connected to ghs.googlehosted.com. Escape character is '^]'. GET / HTTP/1.1 Host: www.caelum.com.br REQUEST... ESPERA... HTTP/1.1 200 OK RESPONSE Content-Type: text/html; charset=utf-8 Vary: Accept-Encoding,User-Agent Content-Language: pt-br Date: Thu, 03 Apr 2014 18:37:18 GMT Server: Google Frontend Cache-Control: private <!DOCTYPE html><html><head><title>caelum</title>

$ telnet www.caelum.com.br 80 Trying 64.233.171.121... Connected to ghs.googlehosted.com. Escape character is '^]'. GET / HTTP/1.1 MÉTODO E URL Host: www.caelum.com.br HTTP/1.1 200 OK STATUS Content-Type: text/html; charset=utf-8 Vary: Accept-Encoding,User-Agent Content-Language: pt-br Date: Thu, 03 Apr 2014 18:37:18 GMT Server: Google Frontend Cache-Control: private RESPOSTA <!DOCTYPE html><html><head><title>caelum</title>

$ telnet www.caelum.com.br 80 Trying 64.233.171.121... Connected to ghs.googlehosted.com. Escape character is '^]'. GET / HTTP/1.1 Host: www.caelum.com.br HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 Vary: Accept-Encoding,User-Agent Content-Language: pt-br Date: Thu, 03 Apr 2014 18:37:18 GMT Server: Google Frontend Cache-Control: private HEADERS HEADERS <!DOCTYPE html><html><head><title>caelum</title>

http texto headers request > espera > response

cliente servidor cliente servidor HTTP 1.1

cliente servidor TCP HANDSHAKE REQUEST REQUEST #2 REQUEST #3 Keep-Alive

cliente cliente servidor cliente servidor cliente servidor TCP HANDSHAKE TCP HANDSHAKE TCP HANDSHAKE REQUEST REQUEST REQUEST REQUEST #2 REQUEST #2 REQUEST #2 REQUEST #3 REQUEST #3 REQUEST #3 servidor cliente servidor cliente servidor TCP HANDSHAKE TCP HANDSHAKE TCP HANDSHAKE REQUEST REQUEST REQUEST REQUEST #2 REQUEST #2 REQUEST #2 REQUEST #3 REQUEST #3 REQUEST #3 de 4 a 8 conexões

otimizações web diminuir requests JUNTAR CSS E JS SPRITES INLINE DE RECURSOS diminuir tráfego GZIP MINIFICAÇÃO DOMÍNIOS SEM COOKIES paralelizar requests MÚLTIPLOS HOSTNAMES CDNs

o fantástico mundo do HTTP 2.0 (e do SPDY)

GET / HTTP/1.1 Host: www.caelum.com.br http 1.1 HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 Content-Language: pt-br Date: Thu, 03 Apr 2014 18:37:18 GMT Cache-Control: private <!DOCTYPE html><html><head><title>caelum</title> <meta name=viewport content=width=device-width> <meta name=description content="a Caelum tem os cursos de Java, Android, Scrum, Rails,.NET, HTML e CSS mais reconhecidos no mercado"><style>

http 1.1 GET / HTTP/1.1 Host: www.caelum.com.br Accept-Encoding: gzip HTTP/1.1 200 OK Content-Type: text/html; charset=utf-8 Content-Language: pt-br Date: Thu, 03 Apr 2014 18:37:18 GMT Cache-Control: private Content-Encoding: gzip Vary: Accept-Encoding??[mŚ???,l?T?%.?JI?;1?R0??E?д?H{{?un??Tm??:?U?5DI??su? L??!???ӵm?_?\{-??bՓ?u??6?1,W??N?C.?0?f*???BV?????!#m? x???l? Q????U?.?MZ跘?M?JN_?I??RNN???}Y??????cM?<?T?l U????8?Π???id?c?8)E8??%:?$D*?????$4???j?F? ((R2[??O?;s??? y\??fd⒙hk?x?-?$???ȉȉ??????????o GZIP

http 2.0 0101010101010101010101 010101010101 0101010101010 101010101010 0101010101010 BINÁRIO??[mŚ???,l?T?%.?JI?;1?R0??E?д?H{{?un??Tm??:?U?5DI??su? L??!???ӵm?_?\{-??bՓ?u??6?1,W??N?C.?0?f*???BV?????!#m? x???l? Q????U?.?MZ跘?M?JN_?I??RNN???}Y??????cM?<?T?l U????8?Π???id?c?8)E8??%:?$D*?????$4???j?F? ((R2[??O?;s??? y\??fd⒙hk?x?-?$???ȉȉ??????????o GZIP

http 2.0?c?8)E8??%:?$?T?%.?JI?;1?R,l?T?%.?JI?;1?R?c?8)E8??%:?$ BINÁRIO HPACK??[mŚ???,l?T?%.?JI?;1?R0??E?д?H{{?un??Tm??:?U?5DI??su? L??!???ӵm?_?\{-??bՓ?u??6?1,W??N?C.?0?f*???BV?????!#m? x???l? Q????U?.?MZ跘?M?JN_?I??RNN???}Y??????cM?<?T?l U????8?Π???id?c?8)E8??%:?$D*?????$4???j?F? ((R2[??O?;s??? y\??fd⒙hk?x?-?$???ȉȉ??????????o GZIP

L S S ou não #heartbleed

http 2.0???????????????????????????????? BINÁRIO HPACK SSL????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????? GZIP SSL

HEADER BINÁRIO GZIP / HPACK SSL

cliente servidor HTTP 1.1 com Keep-Alive

cliente servidor HTTP 1.1 com Pipelining*

cliente servidor HTTP 1.1 com Pipelining*

cliente servidor... HOL Blocking... HTTP 1.1 com pipelining*

cliente servidor HTTP 2.0 multiplexing

multiplexing 1 CONEXÃO TCP ASSÍNCRONO

otimizações web diminuir requests JUNTAR CSS E JS SPRITES INLINE DE RECURSOS diminuir tráfego GZIP MINIFICAÇÃO DOMÍNIOS SEM COOKIES paralelizar requests MÚLTIPLOS HOSTNAMES CDNs

otimizações web diminuir requests JUNTAR CSS E JS SPRITES INLINE DE RECURSOS diminuir tráfego GZIP MINIFICAÇÃO DOMÍNIOS SEM COOKIES paralelizar requests MÚLTIPLOS HOSTNAMES CDNs

otimizações web diminuir requests JUNTAR CSS E JS SPRITES INLINE DE RECURSOS diminuir tráfego GZIP MINIFICAÇÃO DOMÍNIOS SEM COOKIES paralelizar requests MÚLTIPLOS HOSTNAMES CDNs

otimizações web diminuir requests JUNTAR CSS E JS SPRITES INLINE DE RECURSOS diminuir tráfego GZIP MINIFICAÇÃO DOMÍNIOS SEM COOKIES paralelizar requests MÚLTIPLOS HOSTNAMES CDNs

http 1.1 :method: GET :path: / Host: www.caelum.com.br Accept: text/html,application/xhtml+xml;q=0.9,image/jpeg Accept-Encoding: gzip User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) Cookie: SID=786dads78asdbad876asdhjvb28 :method: GET :path: /style.css Host: www.caelum.com.br Accept: text/html,application/xhtml+xml;q=0.9,image/jpeg Accept-Encoding: gzip User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) Cookie: SID=786dads78asdbad876asdhjvb28

http 1.1 :method: GET :path: / Host: www.caelum.com.br Accept: text/html,application/xhtml+xml;q=0.9,image/jpeg Accept-Encoding: gzip User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) Cookie: SID=786dads78asdbad876asdhjvb28 :method: GET :path: /style.css Host: www.caelum.com.br Accept: text/html,application/xhtml+xml;q=0.9,image/jpeg Accept-Encoding: gzip User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) Cookie: SID=786dads78asdbad876asdhjvb28

http 2.0 :method: GET :path: / Host: www.caelum.com.br Accept: text/html,application/xhtml+xml;q=0.9,image/jpeg Accept-Encoding: gzip User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) Cookie: SID=786dads78asdbad876asdhjvb28 :path: /style.css

http 2.0 :method: GET :path: / Host: www.caelum.com.br Accept: text/html,application/xhtml+xml;q=0.9,image/jpeg Accept-Encoding: gzip User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_2) Cookie: SID=786dads78asdbad876asdhjvb28 :path: /style.css :path: /main.js :path: /imagem.jpg Host: images.caelum.com.br

header tables MENOS BYTES REQUEST e RESPONSE STATEFUL

otimizações web diminuir requests JUNTAR CSS E JS SPRITES INLINE DE RECURSOS diminuir tráfego GZIP MINIFICAÇÃO DOMÍNIOS SEM COOKIES paralelizar requests MÚLTIPLOS HOSTNAMES CDNs

otimizações web diminuir requests JUNTAR CSS E JS SPRITES INLINE DE RECURSOS diminuir tráfego GZIP MINIFICAÇÃO DOMÍNIOS SEM COOKIES paralelizar requests MÚLTIPLOS HOSTNAMES CDNs

inline diminuir requests priorizar conteúdo

<!DOCTYPE html> <html> <head> <style> /* estilo para o ATF */ </style> <script> /* javascript importante */ </script> /* javascript pra depois */ <script src="secundario.js" async></script> </head> <body>... </body> </html> priorizar conteúdo

cliente servidor index.html main.js style.css priorizar conteúdo

cliente servidor 1 index.html 5 main.js 3 style.css priorizar conteúdo

cliente espera servidor index.html main.js style.css index.html blocante

cliente servidor index.html index.html style.css icone.png Server Push

cliente servidor index.html index.html style.css style.css icone.png icone.png Server Push

cliente servidor index.html index.html style.css icone.png cliente servidor index.html index.html style.css icone.png Server Push cancelável

server push PRIORIZAÇÃO CANCELÁVEL CACHEÁVEL

otimizações web diminuir requests JUNTAR CSS E JS SPRITES INLINE DE RECURSOS diminuir tráfego GZIP MINIFICAÇÃO DOMÍNIOS SEM COOKIES paralelizar requests MÚLTIPLOS HOSTNAMES CDNs

otimizações web diminuir requests JUNTAR CSS E JS SPRITES INLINE DE RECURSOS diminuir tráfego GZIP MINIFICAÇÃO DOMÍNIOS SEM COOKIES paralelizar requests MÚLTIPLOS HOSTNAMES CDNs

COMPRESSÃO MULTIPLEXING CRIPTOGRAFIA PRIORIZAÇÃO BINÁRIO SERVER PUSH http 2 +PERFORMANCE +FÁCIL +LEVE +MOBILE +COMPATÍVEL +SEGURO

spdy Google: até 45% mais rápido

spdy Real: depende RTT Banda Perdas Browser

otimizações web http2 diminuir tráfego otimizar renderização diminuir latência CACHE MINIFICAÇÃO JS, CSS, HTML COMPRESSÃO DE IMAGENS SERVER PUSH / HINT CRITICAL PATH 60 FPS / JANK FREE CDNs QUIC

http 2 Dez 2013: draft 09 (impl.) Abr 2014: draft 11 Nov 2014: recomendação

spdy Nov 2013: draft 3.1???: draft 4

servidor nginx NodeJS mod_spdy Jetty spdy

servidor nghttp2 NodeJS Ruby Go http 2.0

USE SPDY HOJE FIQUE DE OLHO NO HTTP2 DE AMANHÃ

BÔNUS

web components <link rel= stylesheet href= super-botao.css > <template> <button>{{texto}}</button> </template> <script src= super-botao.js ></script> super-botao.html <link rel= import href= super-botao.html >

web components BARATO SERVER PUSH

modularização JS define([ jquery ], function($) { }); define([ jquery ], function($) { }); home.js contato.js

modularização JS define([ jquery ], function($) { }); define([ jquery ], function($) { }); home.js contato.js LOADER all.min.js

modularização JS 2.0 define([ jquery ], function($) { }); define([ jquery ], function($) { }); home.js contato.js <script src= loader.js ></script> <script src= jquery.js async></script> <script src= home.js async></script>

modularização JS 2.0 define([ jquery ], function($) { }); define([ jquery ], function($) { }); home.js contato.js server push <script src= loader.js ></script> <script src= jquery.js async></script> <script src= home.js async></script>

modularização BARATO CACHEÁVEL LOADER + SIMPLES

obrigado! @srsaude @sergio_caelum 20% OFF CUPOM QCONSP2014

links adicionais: The Effect of Network and Infrastructural Variables on SPDY's Performance. Livro High Performance Browser Networking Especificação HTTP2