A empresa Cloudflare para garantir o suporte ao protocolo HTTP/3 no NGINX. O módulo é implementado como uma extensão da biblioteca em desenvolvimento no Cloudflare. com a implementação do protocolo de transporte QUIC e HTTP/3. O código quiche foi escrito na linguagem Rust, mas o próprio módulo para NGINX é escrito em C e interage com a biblioteca através de vinculação dinâmica. Os desenvolvimentos sob a licença BSD.
Para compilar, basta baixar para o nginx 1.16 e a biblioteca quiche, após o que o nginx deve ser recompilado com as opções "—with-http_v3_module —with-quiche=../quiche". Na compilação, o suporte ao TLS deve ser baseado na biblioteca BoringSSL ("—with-openssl=../quiche/deps/boringssl"), o uso do OpenSSL ainda não é suportado. Para aceitar conexões, a configuração deve incluir a diretiva listen com a flag "quic" (por exemplo, "listen 443 quic reuseport").
No software cliente, o suporte ao HTTP/3 já foi adicionado em compilações experimentais do Chrome Canary e na ferramenta curl. No lado do servidor, ainda era necessário usar implementações isoladas limitadas em suas capacidades A capacidade de processamento do HTTP/3 no nginx possibilitará simplificar significativamente a implantação de servidores com suporte ao HTTP/3 e tornará mais acessível a implementação de testes do novo protocolo. A aparição do suporte nativo ao HTTP/3 no nginx está prevista na versão 1.17.x dentro de 6 a 12 meses.
Vale lembrar que o HTTP/3 padroniza o uso do protocolo QUIC como transporte para o HTTP/2. O protocolo (Quick UDP Internet Connections) vem sendo desenvolvido pela Google desde 2013 como uma alternativa à combinação TCP+TLS para a Web, abordando problemas de latência elevada na configuração e negociação de conexões TCP e eliminando atrasos em caso de perda de pacotes durante a transmissão de dados. O QUIC é uma camada sobre o protocolo UDP, suportando multiplexação de várias conexões e fornecendo métodos de criptografia equivalentes ao TLS/SSL.
Principais QUIC:
- Alta segurança, equivalente ao TLS (na prática, o QUIC possibilita o uso do TLS sobre UDP);
- Controle da integridade do fluxo, prevenindo a perda de pacotes;
- Capacidade de estabelecer uma conexão instantaneamente (0-RTT, em cerca de 75% dos casos, os dados podem ser transmitidos imediatamente após o envio do pacote de configuração da conexão) e garantir latências mínimas entre o envio da solicitação e o recebimento da resposta (RTT, Round Trip Time);
- Não reutilizar o mesmo número de sequência ao retransmitir um pacote, o que ajuda a evitar ambiguidades na identificação dos pacotes recebidos e elimina timeouts;
- A perda de um pacote afeta apenas a entrega do fluxo relacionado e não interrompe a entrega de dados em fluxos paralelos transmitidos através da conexão atual;
- Mecanismos de correção de erros que minimizam atrasos devido à retransmissão de pacotes perdidos. Uso de códigos especiais de correção de erros em nível de pacote para reduzir situações que exigem a retransmissão de dados de pacotes perdidos.
- Os limites dos blocos criptográficos estão alinhados com os limites dos pacotes QUIC, o que diminui o impacto da perda de pacotes na decodificação do conteúdo dos pacotes subsequentes.
- Ausência de problemas de bloqueio de fila TCP.
- Suporte a identificadores de conexão, permitindo reduzir o tempo de estabelecimento de novas conexões para clientes móveis.
- Capacidade de conectar mecanismos avançados de controle de congestionamento.
- Uso de técnicas de previsão de largura de banda em cada direção para garantir a intensidade ideal de envio de pacotes, evitando um estado de sobrecarga em que ocorre a perda de pacotes.
- Notável de desempenho e capacidade em comparação ao TCP. Para serviços de vídeo, como o YouTube, a aplicação do QUIC demonstrou uma redução de 30% nas operações de buffering durante a reprodução de vídeos.
Fonte: opennet.ru
