HTTP passado, presente e futuro. -...

69
HTTP passado, presente e futuro.

Transcript of HTTP passado, presente e futuro. -...

Page 1: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

HTTPpassado, presente e futuro.

Page 2: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Luiz FernandoRodrigues (ou Fernahh)blog.fernahh.com.br

github.com/fernahh

twitter.com/fernahh

speakerdeck.com/fernahh

Page 3: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

www.organicadigital.com

Page 4: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

HTT... o que?

Page 5: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

HTT... o que?HyperText Transfer ProtocolDesenvolvido para distribuir conteúdo de hypertexto.

Page 6: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Iniciauma conexão

GET /foo.html

PROCESSAFecha a

conexão.

Page 7: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

http://bit.ly/19uEIk0

Page 8: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve
Page 9: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

uma request! só 2KB!

Page 10: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

HTTP/1.1

GET: requisita um objeto ao servidor.

POST: escreve um objeto no servidor.

PUT: escreve um objeto no servidor respeitando a idempotência.

DELETE: remove um objeto no servidor.

Page 11: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Iniciauma conexão

GET /foo.html

Fecha aconexão.

HTTP/1.1 > Keep Alive

GET /bar.css

Page 12: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

HTTP/1.1 > Multiplos hosts

Com HTTP1.1 podemos abrir de 4 a 8 conexões por origem (depende do browser).

Page 13: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

HTTP/1.1 > Multiplos hosts

podemos criar até 100 conexões simultâneas...

Page 14: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

A web nasceu descentralizada

O HTTP é Stateless

Page 15: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

HTTP WEB

Page 16: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

HTTP WEBmas essa linda história de amor mudou...

Page 17: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

um pouco de história...

Page 18: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

1990

HTML

Page 19: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

1990

HTML Elemento <img>

1993

Page 20: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

1990

HTML Elemento <img>

1993 1994

CSS

Page 21: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

1990

HTML Elemento <img>

1993 1994

CSS

1995

JavaScript

Page 22: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

1990

HTML Elemento <img>

1993 1994

CSS

1995

JavaScript

no caso mais simples, já temos 4 requisições e4 processamentos do servidor.ou seja,

a web começou a evoluir!

Page 23: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Mas e o HTTP? Não evoluiu nesses 5 anos?

Page 24: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Mas e o HTTP? Não evoluiu nesses 5 anos?

Não.

Page 25: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

1991

HTTP

1999

HTTP/1.1

Page 26: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

1991

HTTP

1999

HTTP/1.1

SÓ 8 (O-I-T-O) ANOS DEPOIS GANHAMOS O MÉTODO POST!

Page 27: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

A versão 1.1 do protocolo HTTP é o que

usamos até hoje.

Page 28: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

HTTP WEB

em linhas curtas...

Leiam, sério: http://tableless.com.br/o-grande-desencontro-http-com-o-html/

Page 29: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Mas o homem sempre evolui em situações difíceis...

Concatenamos assets(imagens, css e js)

Compactamos assets (gzip, minificação, etc)

Usamos múltiplos hostnames

Page 30: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Mas o homem sempre evolui em situações difíceis...

Concatenamos assets(imagens, css e js)

Compactamos assets (gzip, minificação, etc)

Usamos múltiplos hostnames

Otimização de requisições

Diminuição de tráfego

Paralelização de requisições

Page 31: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

chegamos a 2015 com evoluções incríveis!

e a web também...

Page 32: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve
Page 33: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

SPDY

uma das mais importantes evoluções para o nosso protocolo...

Page 34: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

SPDY

HTTPSPDYSSLTCP

Apenas um

a

camada a mais!

Page 35: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

SPDY

HTTPSPDYSSLTCP

Fallback HTTPS, ou seja:SEGURANÇA!

Page 36: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

SPDY

O tempo de carregamento de sua página pode cair mais de 40%, dependendo da situação.

Page 37: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

HTTP/2

e depois de 16 anos...

Page 38: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Compressão automática

Page 39: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Compressão automática > o que muda

- GZIP é padrão obrigatório;

- Headers são binários e comprimidos.

Page 40: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Compressão automática > exemplo de header HTTP/1.1

HTTP/1.1 200 OKContent-Type: text/html; charset=utf-8Transfer-Encoding: chunkedConnection: keep-aliveStatus: 200 OK

X-UA-Compatible: IE=Edge,chrome=1ETag: "4618f5c69dfa0ee8cb492830482c0bbe"Cache-Control: max-age=0, private, must-revalidate

Set-Cookie: _organicadigital_session=BAh7B0kiD3Nlc3Npb25f….Date: Sat, 21 Mar 2015 19:23:51 GMTServer: nginx/1.6.0 + Phusion Passenger 4.0.42

<!DOCTYPE html>...

Page 41: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Compressão automática > exemplo de header HTTP/2

0010101010101010101

01010101010101010100010101010101010101101010101010

?T?%.?JI?;1?R,1?T?.?[mŚ???,1? Q?_?*f0?{{?un?T?%.?JI?;1?R,1?T?.?[mŚ???,1? Q?_?*f0?{{?un,1?T?.?[mŚ?T?%??????????0

Page 42: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Compressão automática > exemplo de header HTTP/2

0010101010101010101

01010101010101010100010101010101010101101010101010

?T?%.?JI?;1?R,1?T?.?[mŚ???,1? Q?_?*f0?{{?un?T?%.?JI?;1?R,1?T?.?[mŚ???,1? Q?_?*f0?{{?un,1?T?.?[mŚ?T?%??????????0

Binário

GZIP

Page 43: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Compressão automática > exemplo de header HTTP/2

?T?%.?JI?;1?R,1?T

JI?;1?R,1?T?,%JI?;1?R,1?T1?R,1?T???m,;T?un,1?TU?R,1??R,1?m1R

?T?%.?JI?;1?R,1?T?.?[mŚ???,1? Q?_?*f0?{{?un?T?%.?JI?;1?R,1?T?.?[mŚ???,1? Q?_?*f0?{{?un,1?T?.?[mŚ?T?%??????????0

HPACK

GZIP

Page 44: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Compressão automática > exemplo de header HTTP/2

?????????????????

????????????????????????????????????????????????????????????

???????????????????????????????????????????????????????????????????????????????????????????????????????????????????

Ah sim,temos HTTPS!

X

Page 45: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Free, automatizado e aberto!

Page 46: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

0010101010101010101

01010101010101010100010101010101010101101010101010

?T?%.?JI?;1?R,1?T?.?[mŚ???,1? Q?_?*f0?{{?un?T?%.?JI?;1?R,1?T?.?[mŚ???,1? Q?_?*f0?{{?un,1?T?.?[mŚ?T?%??????????0

HTTP/1.1 200 OKContent-Type: text/html; charset=utf-8Transfer-Encoding: chunkedConnection: keep-aliveStatus: 200 OK

X-UA-Compatible: IE=Edge,chrome=1ETag: "4618f5c69dfa0ee8cb492830482c0bbe"Cache-Control: max-age=0, private, must-revalidate

Set-Cookie: _organicadigital_session=BAh7B0kiD3Nlc3Npb25f….

Date: Sat, 21 Mar 2015 19:23:51 GMTServer: nginx/1.6.0 + Phusion Passenger 4.0.42

<!DOCTYPE html>...

Page 47: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Multiplexing

Page 48: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Multiplexing > o que muda

- Requisições e respostas são paralelas;

- Ou seja, mais de uma requisição por conexão.

Page 49: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Multiplexing > exemplo

Iniciauma conexão

Fecha aconexão.

Page 50: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Multiplexing é amor!

Page 51: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Concatenamos assets(imagens, css e js)

Compactamos assets (gzip, minificação, etc)

Usamos múltiplos hostnames

Otimização de requisições

Diminuição de tráfego

Paralelização de requisições

Page 52: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Priorização de requisições

Page 53: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Priorização de requisições > o que muda

- Poderemos priorizar recursos;

- Escolhemos o que o usuário verá por primeiro.

Page 54: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Priorização de requisições > o que muda

1ºGET /index.html

3ºGET /main.js

2ºGET /main.css

A priorida

de do

CSS é maior!

Page 55: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Concatenamos assets(imagens, css e js)

Compactamos assets (gzip, minificação, etc)

Usamos múltiplos hostnames

Otimização de requisições

Diminuição de tráfego

Paralelização de requisições

Page 56: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Server Push

Page 57: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Server Push > o que muda

- O servidor poderá enviar recursos para o cliente;

- Adeus gambiarras.

Page 58: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Server Push > o que muda

1ºGET /index.html

main.js

main.css

index.html

Page 59: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

Concatenamos assets(imagens, css e js)

Compactamos assets (gzip, minificação, etc)

Usamos múltiplos hostnames

Otimização de requisições

Diminuição de tráfego

Paralelização de requisições

Page 60: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

“As boas práticas de hoje vão ser futuros problemas no HTTP/2”

Rodrigo Willrich

Page 61: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

HTTP/2 > Padrões atuais == Gambiarras

Sprite

Concatenação de arquivos

Servir assets de domínios diferentes

Page 62: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

HTTP/2 > Padrões atuais == Gambiarras

Sprite

Concatenação de arquivos

Servir assets de domínios diferentes

Page 63: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

HTTP/2 > Padrões atuais == Gambiarras

Sprite

Concatenação de arquivos

Servir assets de domínios diferentes

Page 64: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

HTTP/2 > Padrões atuais == Gambiarras

Sprite

Concatenação de arquivos

Servir assets de domínios diferentes

Page 65: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

...mas o mundo será bem melhor...

Page 66: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

eu acho.

Page 67: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

HTTP/2 > No front-end

11+ 43+ 39+ 30+ 9+

Page 68: HTTP passado, presente e futuro. - sindadosba.org.brsindadosba.org.br/wp-content/uploads/2015/07/Material-da-palestra-… · HTTP/1.1 GET: requisita um objeto ao servidor. POST: escreve

HTTP/2 > No back-end

Módulos para Apache

Módulos para ngnix

Jetty e Netty (Java)

Servidores http/2 para NodeJS, Ruby, ...

Implementações: https://github.com/http2/http2-spec/wiki/Implementations