HTTP/2 es una versión actualizada del protocolo HTTP, el cual es utilizado para transmitir datos en la World Wide Web. HTTP/1.1 es la versión anterior de HTTP.
HTTP/2 tiene varias mejoras en comparación con HTTP/1.1, incluyendo:
- Mayor eficiencia: HTTP/2 permite la transmisión de múltiples solicitudes y respuestas de manera simultánea a través de una única conexión TCP. Esto significa que es más rápido que HTTP/1.1, ya que evita la sobrecarga del sistema que resulta de la apertura y cierre de múltiples conexiones TCP.
- Encabezados comprimidos: HTTP/2 utiliza una técnica de compresión llamada HPACK para comprimir los encabezados de las solicitudes y respuestas. Esto reduce el tamaño de los datos transmitidos, lo que a su vez reduce el tiempo de transmisión y aumenta la eficiencia.
- Servidor push: HTTP/2 permite que el servidor envíe datos al cliente sin esperar a que el cliente lo solicite. Esto puede ser útil en situaciones donde el servidor sabe que el cliente necesitará ciertos datos en el futuro, como imágenes o archivos CSS.
HTTP/2 es una versión más rápida y eficiente de HTTP que mejora la experiencia del usuario al reducir el tiempo de carga de las páginas web.
Habilitar SSL en Apache
antes de habilitar HTTP/2 será necesario habilitar SSL en Apache, en los siguientes enlaces se encuentran los pasos necesarios para configurar un certificado autofirmado y un certificado generado con Let´s Encrypt:
- Cómo obtener un certificado SSL Let’s Encrypt en Apache
- Cómo crear un certificado SSL autofirmado en Apache
- Generar Certificado SSL Wildcard de Let’s Encrypt en Apache y Nginx
a2enmod ssl
Habilitar HTTP/2
a2enmod http2
Modificar en el archivo de configuración de Apache:
nano /etc/apache2/apache2.conf
Adicionar las siguientes líneas para aplicarlo a todos los subdominios
Protocols h2 h2c http/1.1
SSLStrictSNIVHostCheck off
Hay tres parámetros en la directiva Protocols mencionada anteriormente:
- h2 – instruyendo a Apache a soportar el protocolo HTTP/2 sobre SSL/TLS
- h2c – instruyendo a Apache a soportar HTTP/2 sobre TCP
- http/1.1 – si un cliente no acepta HTTP/2, entonces sirve la solicitud sobre HTTP/1.1
Si se desea que otros archivos (css, js, imagenes) también utilicen el protocolo HTTP/2, tendremos que adicionar en el archivo de configuración (/etc/apache2/apache2.conf) las siguientes líneas:
H2Push on
H2PushPriority * after
H2PushPriority text/css before
H2PushPriority image/jpeg after 32
H2PushPriority image/png after 32
H2PushPriority image/svg+xml after 16
H2PushPriority font/woff2 after 16
H2PushPriority application/javascript interleaved
Probar la configuración
Primero verificamos los archivos de configuración de Apache:
apache2ctl configtest
# Syntax OK
Si no existen problemas entonces se debe reiniciar el servidor Apache para ver la implementación del protocolo:
systemctl restart apache2
Finalmente revisamos las respuestas obtenidas en el navegador web: