HTTP/2
O que você precisa saber!
Waldyr Felix
CTO da Orange Founders
Head de Tecnologia da FCamara
ȗ
HTTP/2 pra que te quero...
• Evolução	do	HTTP/1.1	mantendo	compatibilidade	com	o	que	existe
• Reduzir	latência	para	melhorar	o	tempo	de	carregamento	das	páginas
• Melhorar	o	fluxo	de	pacotes	TCP,	diminuindo	o	congestionamento
• Deve	substituir	o	HTTP/1.x	progressivamente
• Baseado	no	SPDY/2
Histórico do HTTP
HTTP/0.9 HTTP/1.0 HTTP/1.1 HTTP/2
1991 1996 1999 2015
HTTP/2	Working Group
bin	J txt L
• HTTP/2	é	binário	e	não	textual
• Melhora	a	eficiência	na	leitura	dos	requests/responses pelos	
webservers e	browsers
• Diminui	o	overhead de	caracteres	inúteis
• Menos	sujeito	a	erros
Multiplex
• Evolução	do	HTTP/1.1	mantendo	compatibilidade	com	o	que	existe
• Reduzir	latência	para	melhorar	o	tempo	de	carregamento	das	páginas
• Melhorar	o	fluxo	de	pacotes	TCP,	diminuindo	o	congestionamento
• Ser	transparente	para	os	desenvolvedores
Multiplex
• Resolve	o	problema	de	muitas	requisições	intercaladas	
• Os	requests/responses são	disparados	de	uma	só	vez
• Melhorar	a	performance	no	carregamento	inteiro	da	página
• Evita	o	velho	problema	de	requisições	em	cascata
HTTP/1.1	Pipelining vs HTTP/2	Multiplexing
client server
*Head	of Line Blocking*
client server
Compressão de HTTP Header
• Diminuir	o	tamanho	do	request/response
• Média	as	requisições	tem	1400	bytes
• Usa	HPACK	para	fazer	a	compressão
• Chega	comprimir	numa	taxa	relativa	a	30%	do	tamanho	original
HTTP/1.1	Headers vs HTTP/2	Headers
GET / HTTP/1.1
Host: www.devxperience.com.br
HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Language: pt-br Date: Thu, 01 Set 2017 00:00:00 GMT
Cache-Control: private
?c?8)E8??%:?$
T?%.?JI?;1?R
,l?T?%.?JI?;1?R
?c?8)E8??%:?$
189	bytes
61	bytes
32%	do	
conteúdo	original
HTTP/2 Server Push
• O	servidor	manda	dados	para	o	browser	proativamente
• Elimina	necessidade	de	ficar	esperando	recursos	dependentes	
carregarem	para	chamar	o	próximo.	Exemplo:	index.html,	style.css...
• Melhora	a	performance	de	carregamento	total	da	página,	pois	evita	
requisições	bloqueantes
HTTP/1.1	Req/Res	vs HTTP/2	Server	Push
client server
Index.html
Style.css
App.js
Logo.png
client server
Index.html
Style.css
App.js
Logo.png
Just one connection
• Com	o	HTTP/2	é	possível	trazer	todas	as	
requisições	usando	apenas	uma	conexão
• Resolve	o	problema	de	conexões	
simultâneas	por	domínio	do	HTTP/1.x
Segurança no HTTP/2
• Funciona	com	criptografia	ou	sem	(HTTP	ou	HTTPS)
• No	caso	do	uso	de	criptografia	é	obrigatório	TLS	1.2+
• Todos	os	browsers	implementaram	HTTP/2	com	TLS	obrigatório
• Na	prática	é	obrigatório
Suporte ao HTTP/2
• Firefox,	Chrome,	IE,	Edge,	Safari,	Opera	e	os	browsers	mobile	
• Apache	através	do	módulo	mod_h2	
• h2o,	Tomcat,	IIS,	nginx e	node.js suportam	na	versão	mais	nova
• CDNs:	Akamai,	AWS	CloudFront,	Fastly e	Cloudflare
Implementar HTTP/2
• A	maioria	dos	servidores	web	já	suportam	HTTP/2
• Precisam	de	upgrade	e	em	alguns	casos	de	um	plug-in
• Todos	os	browsers	atualmente	já	suportam	HTTP/2	com	TLS
**Não	precisa	mudar	a	forma	como	desenvolve-se	para	web**
Links Interessantes
• Taxa	de	compressão	do	HPACK	para	HTTP	Header
https://github.com/http2jp/hpack-test-case/wiki/Compression-Ratio
• Akamai HTTP/2	Demo
https://http2.akamai.com/demo
• HTTP/2	FAQ
https://http2.github.io/faq/
• Documentação	do	HTTP/2	pelo	HTTP	Working Group
http://httpwg.org/specs/
• Ferramentas	que	já	implementam	HTTP/2
https://github.com/http2/http2-spec/wiki/Tools

HTTP/2. O que você precisa saber a nova versão do HTTP.