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