miércoles, 8 de marzo de 2017

HTTP versus HTTPS versus HTTP/2

Hola gente informática, llevo mucho tiempo sin postear algo. Este es la traducción del excelente post original y comentado en algunos puntos por mi: https://www.tunetheweb.com/blog/http-versus-https-versus-http2, espero les guste.

Introducción

Todos sabemos que rendimiento de HTTPS ya no es una barrera para su implementación en los sitios web. Incluso hay sitios como https://www.httpvshttps.com que muestran que HTTPS es mucho más rápido que HTTP.

Esto es contra intuitivo ya que sin duda hay cargas extras sobre HTTPS que normalmente se aplican encima de la capa HTTP. Así que cada vez que alguien pasa por este sitio, se pregunta cómo puede ser. Bueno, la razón no es debido al mismo HTTPS, sino que ese HTTPS usa HTTP/2.

De hecho, en el sitio, se menciona en la parte inferior, "el texto en HTTP/1.1 se compara con HTTPS HTTP/2 encriptado", pero no es tan obvio. El objetivo de la página (supongo) es mostrar las mejores condiciones de HTTP en comparación con las mejores condiciones para HTTPS y como HTTP/2 es sólo compatible con los navegadores que usan HTTPS, ahí tienen el argumento de la comparación.

Ahora estoy seguro que esto es falso por varias razones:
  • No está claro que sean pruebas similares ya que la única diferencia es que una sección solo son HTTPS. Se muestra que el hecho implícito de ser HTTPS es la razón por la que es más rápido cuando no lo es.
  • Es un ejemplo extremo que un sitio web HTTP/2 sea muy bueno cargando 360 imágenes casi idénticas. Cuando los sitios web siempre van creciendo en cantidad de imágenes y ninguno carga 360 imágenes casi idénticas desde mismo dominio. De modo que el único problema serían las latencias en el cual HTTP/2 tiene mejoras sustanciales. La mayoría de los sitios web cargan una cantidad de recursos de varios dominios y algunos de esos recursos (especialmente CSS y Javascript) toman tiempo en procesarse, mientras que las imágenes pequeñas tienen un tiempo de procesamiento insignificante.
  • HTTP/2 incluye compresión del header así los request se ven más pequeños en HTTP/2. De nuevo, la mejora aquí se ve ya que carga un montón de pequeños recursos todos casi iguales.
  • HTTPS no significa de forma automática HTTP/2 incluso lo contrario es así. De hecho, hace poco se retrocedió un paso en la disponibilidad de HTTP/2. Tomará un tiempo hasta que HTTP/2 esté disponible en todos los SO clásicos y servidores web comunes, por lo tanto decir que HTTPS es lo mismo que HTTP/2 no me calza mucho. Decir que CDN como CloudFlare ofrece su servicio con HTTP/2 es cierto pero no quiere decir que le sirva todo el mundo.
  • Esta ignora el pequeño impacto en el rendimiento en la conexión inicial de un sitio con HTTPS como si fuera el mismo rendimiento cuando se carga un HTML. Ahora bien, esto es difícil de medir con precisión, sobre todo porque sólo se puede medir una vez por sesión, y es pequeño (unos pocos cientos de milisegundos), pero es algo que la gente nota al pasar de HTTP a HTTPS.
  • ¡No hay razones para hacer trucos como estos! HTTPS y HTTP/2 son grandes tecnologías que tienen muy buenos beneficios, lo que nos invita a utilizarse en todo lo posible. Meter trucos falsos como estos, sólo nubla la visión y te pone en duda sus ventajas.
Ahora, no piensen que es un ataque personal a dicho sitio web ya que es un ejemplo inteligente y bien ejecutado de cómo HTTPS puede ser más rápido que HTTP, pero sólo quiero un poco más de transparencia y me gustaría saber el verdadero impacto de HTTPS con y sin HTTP/2 (el que creo debería ser un poquito más lento, casi imperceptible).

Así que en un intento de hacer un test real, he hecho una prueba similar para comparar HTTPv1.1 con HTTPS (sobre HTTPv1.1) y luego con HTTP/2 (que utiliza HTTPS). Puedes ejecutar esta versión de esta prueba con 36 imágenes más reales. También he creado una versión con 360 imágenes aquí. Le sugiero es que repitas las pruebas varias veces para tener una idea de cuánto tiempo se tarda, y probablemente verás algo como esto para la prueba de 36 imágenes:
Y similarmente sucede con el test de 360 imágenes:
Nota del traductor, agregué abajo la imagen de HTTP VS HTTPS y vs HTTP2:

Lo que inmediatamente se ve es que HTTP es bastante similar a HTTPS. Ocasionalmente es más rápido y ocasionalmente es más lento. Extrañamente se ve más a menudo que HTTPS es ligeramente más rápido que HTTP. No estoy seguro si esto es sólo suerte o algún efecto de almacenamiento en caché. Tal vez mi navegador web, red o servidor web maneja mejor el HTTPS, o tal vez es sólo una coincidencia. De cualquier manera, los números están separados sólo unos pocos puntos porcentuales. O tal vez HTTPS es realmente es más rápido que HTTP :-)

Lo que podemos ver es que HTTPS no causa ningún impacto al rendimiento en sitios web pequeños, como ha sido declarado por la mayoría de los expertos desde hace algún tiempo. Esto podría variar, por supuesto, si usted está ejecutando el sitio en un hardware realmente viejo (me refiero en el cliente o en el lado del servidor) o tiene un sitio web que usa mucho tráfico (por ejemplo, streaming de vídeo), pero para la mayoría de nosotros sería difícil notar el impacto de rendimiento con HTTPS. Hay un pequeño impacto al momento de redirigir a HTTPS (que se puede remediar con HSTS), y otro pequeño impacto al tratar con la sesión HTTPS (que se puede corregir con una buena configuración de HTTPS y podría incluso mejor cuando TLSv1.3 sea más popular). Estos factores son medibles si se utilizan herramientas como http://www.webpagetest.org, pero a la mayoría de los usuarios no le importa medir esta latencia inicial ya que luego no se ven retrasos. Si hay malas conexiones de red (por ejemplo, una mala señal móvil) estos viajes de ida y vuelta causarán más problemas, pero cuando pase eso, tendrás un desempeño malo a nivel general de todos modos.

El otro punto obvio es que HTTP/2 es mucho más rápido que HTTP o HTTPS, aunque sólo está disponible usando HTTPS. Este fue el punto engañoso que sentí de https://www.httpvshttps.com, ya que no fue HTTPS el que causó el buen desempeño, sino que fue HTTP/2, incluso en un sitio más pequeño de 36 imágenes. Por supuesto, el sitio de 360 imágenes sigue siendo un ejemplo extremo y no vas a ver un 91% de mejora simplemente encendiendo HTTPS, incluso usando HTTP/2 para la mayoría de los sitios. Sin embargo incluso el sitio más pequeño de la imagen 36 ve una mejora enorme del 70% en HTTP/2, mucho más de lo que habría esperado.

También es impresionante ver las mejoras de descarga de HTTP/2 debido a la compresión del header. En la página de 360 imágenes el tamaño total de la página es 382kb, es idéntico en HTTP y HTTPS, pero cae a un impresionante 265kb en HTTP/2 ¡una mejora del 30%!:
Ahora, estas imágenes son pequeñas y la mayoría de los recursos que carga un sitio web probablemente son mayores, por lo que la mejora de la compresión de header puede ser menor al 30%, pero sigue siendo buena.

Conclusión

HTTPS y HTTP/2 son dos grandes tecnologías y todos los sitios web corrientes deberían ser conscientes de ellos y buscar implementarlos si no se utilizan todavía. Mi intención de este artículo no fue para probar que HTTPS todavía tiene problemas de rendimiento, ni para soplar sitios web de otros, nada más fue para obtener algunos números tras pruebas de rendimiento que no se explican allí.

HTTPS en particular es una tecnología bien establecida ahora y con iniciativas como Let's Encrypt nunca ha sido más fácil ni más barato obtener un certificado HTTPS para su sitio web. Hay muchas razones para usar HTTPS y se va a hacer cada vez más difícil mantener un sitio HTTP con navegadores web que están apuntando sus características para sitios que usan HTTPS. Si no estás usando HTTPS, entonces debes mirar de qué se trata ahora ahora. Estas pruebas demuestran que el impacto en el rendimiento no es ni siquiera algo notable en la mayoría de los sitios. El movimiento puede ser tedioso, especialmente para los sitios más grandes con un montón de código y páginas legadas, pero esto se hace una sola vez y cuanto antes se inicia mejor será.

HTTP/2 no está listo al 100% los SO y servidores web, pero en poco tiempo lo estará. La especificación HTTP/2 sólo se publicó oficialmente en mayo de 2015, y ya pasado un año casi todos los navegadores web soportan HTTP/2 y muchos servidores web también lo soportan. HTTP/2 será el futuro de la web y si usted tiene la oportunidad de usarlo, entonces juegue, estas pruebas demuestran lo mucho más rápido que puede ser, sin ningún cambio en el propio sitio web. Puedes consultar el post sobre cómo configurar HTTP/2 para Apache si quieres más información sobre eso.

¿Estás de acuerdo? ¿No mucho? Escribe abajo tus comentarios.