HTTP/3: A próxima evolução.
Tags: http, news, security, webdev
Published: 2020-04-21 21:44:12

#### Tópicos
* [Fonte do conteúdo](#chapter-1)
* [O que mudou](#chapter-2)
* [Desafios da nova versão](#chapter-3)
* [Quando será lançado](#chapter-4)

### Fonte <a name="chapter-1"></a>

Este é um resumo geral da [apresentação](https://www.youtube.com/watch?v=rlN4F1oyaRM) de [Daniel Stenberg](https://twitter.com/bagder), criador do [Curl](https://en.wikipedia.org/wiki/CURL), sobre a próxima versão do protocolo HTTP apresentado na conferência GOTO em 17 de abril de 2020.

### O que mudou <a name="chapter-2"></a>

Para enteder o que mudou é importante conhecer como era antes. No início com o Http/1 já tinhamos a tão conhecida comunicação entre cliente e servidor. Entretanto tudo ocorria de maneira mais simples, onde vários pacotes eram perdidos pelo caminho e tudo era lento, algo bem precário. Todas as transmissões ocorriam via um único canal e com o crescrimento das requisições e quantidade de conteúdo transmitido ficou inviável garantir o controle e qualidade. 

Com o Http/2 chegou a ideia de transmissão em streams, que são canais independentes e paralelos para transmissão de dados. Agora com múltiplas vias de comunicação um website poderia carregar de maneira paralela vários conteúdos diferentes e ao mesmo tempo, textos, imagens e outros assets. Antigamente na versão 1 tudo era carregado junto e de uma só vez e ficavamos segundos eternos olhando para uma tela branco ou com conteúdo pela metade. É claro que entre a versão 1 e 2 existiram outros pontos de melhoria, este foi o que escolhi destacar.

Na segunda versão também teve início o uso da camada TCP para garantir qualidade e a TLS para a transmissão segura do conteúdo. Mas ainda é "opcional" a utilização ou não da transmissão segura de informações, o que será bem diferente na versão seguinte.

Com a chegada do Http/3 toda a comunicação será segura, sem excessões. Assim como na versão anterior a comunicação também será via streams, mas desta vez com garantia de maior organização e melhor entrega dos pacotes. 

Na nova versão o TCP será subistituido pelo [QUIC/TLS3](https://en.wikipedia.org/wiki/QUIC). Verdade! Quer ver melhorar? A transmissão dos streams será via UDP, mas claro com proteções para impedir falhas como ataque DDOS e outros mais. Por último promete-se uma maior velicidade nas comunicações e agilidades na troca iniciais de handshakes.

### Desafios da nova versão <a name="chapter-3"></a>

Como em qualquer evolução, o produto (Http/3) não esta totalmente pronto e tão poucos nós estamos prontos para recebê lo. Seguem os pontos destacados por Daniel para a serem vencidos antes do lançamento e uso oficial:

1. **Liberação do UDP:** Das transmissões sob a nova versão ainda há uma falha de 3-7%. Fora que a maioria das empresas bloqueiam a transmissão via UDP para evitar ataques de negação de serviço. 

2. **Evolução de Clientes e Servidores:** Nossos clientes e servidores web deverão evoluir para o uso das novas nuances da nova versão. E durante a transmição ainda será necessário a aptidão para suportar a comunicação por ambos os protocolos.  

3. **Sobrecarga de processamento:** Com o novo gerenciamento de streams, maior velocidade de transmissão e novos algoritmos pode-se esperar uma maior demanda de processamento. Mais velocidade, potência, segurança, conforto? Maior consumo/custo.

4. **Melhor gerenciamento das stacks de UDP:** A ideia de usar stacks/streams não é 100% nova. Mas gerir tudo isso com UDP ainda é, por isso muitas melhorias ainda estão por vir.

5. **A nova TLS/3:**  Na nova versão O TLS também vai evoluir. O grande ponto levantado por Daniel e que todo o TLS foi construído para uso via TCP e a versão 3 ainda seria apenas uma adaptação para o novo modelo.

6. **Padrões e API's ainda não estão 100% prontas:** A nova versão ainda não esta completa, então muitos ainda pode personalizar algumas coisas de seus pontos, mesmo que ocorra uma pequena bagunça no futuro. 

### Quando será lançado <a name="chapter-4"></a>

Segundo o roadmap o lançamento seria agora para o segundo semestre de 2020, mas parece que ainda há um longo caminho. Caso queira testar o Curl ja pode ser utilizado para acessar alguns dos serviços mais conhecidos e estudar as respostas, segue um comando básico para testes:

``` Curl --http3 --head <https://SITE-DESEJADO> ``` 

Obrigado por ler até aqui, espero que tenha gostado e lembre-se de [acessar conteúdo na integra](https://www.youtube.com/watch?v=rlN4F1oyaRM) para mais informações. 

Comente, compartilhe e me siga para mais conteúdos de qualidade.
Até a próxima.