Saltar al contenido principal

HTTP/2

HTTP/1.1 ten moitos problemas. Foi creado cando as páxinas web raramente excedían os 100 KB. O obxectivo principal de HTTP/2 é reducir a latencia ao cargar unha web.

Para conseguir iso, HTTP/2 emprega múltiples técnicas:

  • Transmite os datos de forma binaria en lugar de texto como ocorría en versións anteriores.
  • Comprime as cabeceiras antes de ser enviadas.
  • Usa multiplexación, polo que se poden enviar múltiples solicitudes de maneira simultánea nunha mesma conexión.
  • Permite realizar pushs, é dicir, enviar mensaxes desde o servidor ata o cliente sen existir previamente unha solicitude por parte do cliente. HTTP/1.1 está concebido para que o cliente sexa sempre o que solicita recursos, pero en HTTP/2 permítese que o servidor envíe datos ao cliente se o cre conveniente.

Activar HTTP/2 en Apache

Apache Server proporciona soporte á nova versión do protocolo HTTP a través dun módulo: http2. Activamos o módulo mediante o seguinte comando:

$ sudo a2enmod http2
Saída do comando
$ sudo a2enmod http2
Enabling module http2.
To activate the new configuration, you need to run:
systemctl restart apache2

Nos ficheiros de configuración debemos empregar a directiva Protocols:

Protocols h2 h2c http/1.1

Un exemplo completo dun ficheiro de configuración dun host virtual é o seguinte:

<VirtualHost *:443>
Protocols h2 h2c http/1.1
DocumentRoot /var/www/html

SSLEngine on
SSLCertificateFile /etc/ssl/certs/apache.pem
SSLCertificateKeyFile /etc/ssl/private/apache.key
</VirtualHost>

A liña anterior habilita tres versións diferentes de HTTP:

  • h2: HTTP/2 sobre SSL/TLS
  • h2c: HTTP/2 sobre TCP
  • http/1.1: HTTP/1.1

Pódese variar a orde dos argumentos:

Protocols http/1.1 h2 h2c 

Os que primeiro se definan, son os que máis prioridade teñen, sendo neste último exemplo http/1.1 o máis prioritario e h2c o menos prioritario.

Reiniciamos o servidor:

$ sudo systemctl restart apache2
Soporte de HTTP/2 en navegadores web

Para probar se HTTP/2 está activado correctamente, debemos acceder a un recurso a través de HTTPS. A través de HTTP só se empregará a versión HTTP/1.1. Aínda que o estándar está pensado para HTTP e HTTPS, os navegadores web implementaron esta versión só para empregar sobre TLS.