O protocolo HTTP/2

O protocolo HTTP (Hypertext Transfer Protocol) tem vindo desde a sua criação a ser evoluído, como qualquer protocolo que se preze.

A sua evolução tem uma grande influencia das grandes empresas que usam intensivamente o protocolo HTTP, como a Google entre outras. Como empresas têm que pensar em diminuir custos, para conseguirem, têm de fazer melhoramentos em toda a tecnologia que usam bem como criar novas tecnologias. Estas empresas têm tudo o que é necessário para ganhar experiência.

No entanto, até um blogger  só tem a ganhar com a evolução geral das tecnologias.

O protocolo HTTP/1.1 é usado hoje na maioria dos sites na Internet. No entanto as grandes empresas como a Google, Cloudflare, Facebook, e muitas outras já estão a usar a versão HTTP/2.

Os Browsers mais usados como Chrome, Firefox e outros já suportam o protocolo HTTP/2.

Os servidores web como Apache, Nginx já suportam HTTP/2.

As novas versões dos servidores que são distribuídos em distribuições Linux iram trazer os servidores nas versões que já suportam o HTTP/2. Caso a sua distribuição preferida não traga suporte, há sempre a possibilidade de compilar os softwares.

Com este artigo não pretendo aprofundar o protocolo HTTP de forma minuciosa. Apenas apresentar algumas vantagens da nova versão HTTP/2.

 

Como funciona o HTTP/1.x

Até à versão HTTP/1.1 o Browser abre uma conexão com o servidor e faz o pedido de uma pagina qualquer por exemplo https://www.ncdc.pt/. Enviando os seguintes cabeçalhos ou idênticos.


Host: www.ncdc.pt
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:64.0) Gecko/20100101 Firefox/64.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8</code>
Accept-Language: pt-PT,pt;q=0.8,en;q=0.5,en-US;q=0.3
Accept-Encoding: gzip, deflate, br
Referer: https://www.ncdc.pt/
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache

O servidor recebe estes cabeçalhos e retorna a pagina pedida:

HTTP/1.1 200 OK
Date: Fri, 14 Dec 2018 16:20:15 GMT
Server: Apache
X-Frame-Options: SAMEORIGIN
Strict-Transport-Security: max-age=63072000; includeSubdomains; preload
Content-Security-Policy: block-all-mixed-content
Access-Control-Allow-Origin: https://static.ncdc.pt
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Vary: Accept-Encoding,Cookie
Cache-Control: max-age=3, must-revalidate
Content-Encoding: gzip
Content-Length: 103788
Last-Modified: Fri, 14 Dec 2018 16:14:30 GMT
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive</code>
Content-Type: text/html; charset=UTF-8

<html prefix="og: http://ogp.me/ns#" lang=pt-PT><head>
<meta charset=UTF-8>
<meta name=viewport content="width=device-width, initial-scale=1.0">
<link rel=alternate href="ncdc.pt/" hreflang=pt-PT>
<title>No caminho do conhecimento -</title>
<link rel=stylesheet id="hexa-style-css"
href="https://statservidoric.ncdc.pt/wp-content/themes/hexa/style.css"
type="text/css" media="all">
</head>
<body>
Conteudo da pagina!
</body>
</html>

Então o browser analisa a pagina e procura outros ficheiros que sejam necessários descarregar, como ficheiros .CSS para permitir personalizar o estilo da pagina. Ficheiros de imagem, vídeo, scripts .JS, etc e começa a descarrega-los.

No HTTP/1.x os ficheiros são descarregados em uma conexão de forma síncrona, um a seguir ao outro. Claro que os browsers tentam acelerar este processo abrindo várias conexões para descarregar os vários ficheiros mais rápido.

Só que o processo de abrir uma conexão com o servidor exige muitos recursos de toda a rede de um ponto a outro, desde o cliente até ao servidor. Bem como é necessário tempo para iniciar as conexões necessárias.

Se analisarmos as conexões  abertas no servidor para servir uma pagina veremos que são muitas.

root@www:~# netstat -antp | grep :443
tcp6 0 0 192.168.16.245:443 192.168.16.1:55454 ESTABLISHED 13365/apache2
tcp6 0 0 192.168.16.245:443 192.168.16.1:55455 ESTABLISHED13640/apache2
tcp6 0 0 192.168.16.245:443 192.168.16servidor.1:55453 ESTABLISHED 12852/apache2
tcp6 0 0 192.168.16.245:443 192.168.16.1:55442 ESTABLISHED 13476/apache2
tcp6 0 0 192.168.16.245:443 192.168.16.1:55452 ESTABLISHED 13547/apache2
tcp6 0 0 192.168.16.245:443 192.168.16.1:55447 ESTABLISHED 12849/apache2
tcp6 0 0 192.168.16.245:443 192.168.16.1:55451 ESTABLISHED 13375/apache2
tcp6 0 0 192.168.16.245:443 192.168.16.1:55449 ESTABLISHED 13543/apache2
tcp6 0 0 192.168.16.245:443 192.168.16.1:55450 ESTABLISHED 13548/apache2
tcp6 0 0 192.168.16.245:443 192.168.16.1:55448 ESTABLISHED 13239/apache2

Os cabeçalhos que são enviados e recebidos a cada pedido, não são comprimidos e às vezes quando são usados cookies, só o cabeçalho pode conter 800Bytes ou mais!

No entanto esta solução tem realmente funcionado durante muito tempo, como todos sabemos.

Como funciona o HTTP/2.0

O HTTP/2.0 traz muitas mudanças.

Os ficheiros necessários para apresentar uma página são agora transmitidos de forma assíncrona. O Browser vai pedindo os ficheiros aoservidor e eles vão sendo enviados. O servidor também pode enviar ficheiros para o Browser mesmo sem terem sido pedidos ainda.  É possível priorizar os ficheiros que são mais importantes como ficheiros .CSS, fontes para apresentar os textos na página e outros que sejam necessários.

Tudo é  transmitido comprimido entre o servido e o browser. Até mesmo os cabeçalhos de pedido e resposta.

Para cada servidor é apenas aberta uma única conexão. Desta forma prrmitindo grande poupança em toda a infrastretura de rede. Pois os Routers vão poder gerir melhor as conexões para um determinado servidor. Bem como permitir que o mesmo hardware gaste os mesmos recursos para servir mais conteúdo.

O HTTP/2.0 transmite tudo de forma binária encapsulando tudo em uma conexão.

E muito mais novidades!

Devo começar já a usar o HTTP/2.0?

Se usa um servidor que serve conteúdo diretamente aos seus clientes, é uma boa altura para começar a fazer a mudança. Desta forma é possível oferecer aos seus clientes conteúdos mais rápido e não gastar tantos recursos.

Estar preparado para o futuro.

No entanto se usar a Cloudflare não necessita fazê-lo no seu servidor. A Cloudflare comunica com o seu servidor com o HTTP/1.1. No entanto a Cloudflare serve os seus conteúdos aos seus clientes com HTTP/2.0.

A Cloudflare já usa HTTP/2.0 à muito tempo.

Conclusão

O HTTP/2.0 está para ficar, adotar esta versão do protocolo será uma realidade, pois as distribuições  Linux vão dar suporte por defeito a ela.

Em certos projectos até será necessário desativar esta versão pois não será usada. Como por exemplo quando se usa a Cloudflare.

Deixe uma resposta