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/TLSh2c: HTTP/2 sobre TCPhttp/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
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.