Comenzando con HTTP2

1. Antecedentes

El artículo anterior presentó el protocolo de serialización ProtoBuf, que es una de las razones por las que gRPC es increíble. La segunda razón es la adopción de HTTP2. HTTP2 se desarrolló a partir de SPDY. En el pasado, la plataforma Taobao MTOP implantó el protocolo SPDY para optimizar el rendimiento. De esta manera, el cliente Taobao puede ajustar la interfaz backend XX veces más rápido. Debería ser reemplazado por HTTP2.0 ahora. Han pasado muchos años y casi me he olvidado qué es MTOP, por lo que todavía es necesario escribir notas y organizar. ellos con frecuencia.

2. Optimización HTTP2 de HTTP1

1. Multiplexación

  • HTTP2 implementa solicitudes paralelas en una única conexión TCP. Una conexión puede transportar cualquier número de flujos de datos bidireccionales. El flujo es un canal virtual en la conexión y los mensajes en el flujo se transmiten en marcos binarios.
  • HTTP1.X requiere múltiples solicitudes simultáneas, debe usar múltiples conexiones TCP y tiene un límite en la cantidad de solicitudes para un solo nombre de dominio.

2. Codificación de datos

  • HTTP2 divide solicitudes y respuestas en marcos más pequeños y utiliza codificación binaria.
  • Los mensajes de solicitud y respuesta HTTP1.X constan de una línea de inicio, un encabezado y un cuerpo, con cada parte separada por caracteres de nueva línea.

3. HTTP2 también admite funciones de compresión de encabezados y inserción de servidor.

3. Pruebas experimentales

El propósito de este experimento es probar las características de multiplexación de HTTP2.

1. Construir entorno

Configuración de Nginx Condiciones necesarias de Http2
La versión de Nginx es mayor que 1.9.5, mi versión es 1.20.1
La versión de OpenSSL es mayor que 1.0.2e, mi versión es OpenSSL 1.0.2k
Verifique si Nginx tiene dos módulos instalados --con-http_v2_module, - - con-openssl

configuración de nginx.conf

Nota: La configuración de HTTP2 requiere el mismo certificado que la configuración de HTTPS. Agregue [http2] a la configuración de HTTPS para admitirlo. Para eliminar HTTPS, simplemente elimine [https].

2. Comparación de mensajes de solicitud de red.

Primero, escribí un index.html con 20 imágenes incrustadas en su interior.

<img src="a.jpg"/>
<img src="b.jpg"/>
......
<img src="t.jpg"/>

Configurado como HTTP2, captura de pantalla de solicitud de red del navegador

Configurado como HTTP2, TCPDUMP captura datos en el servidor, puede ver que solo hay una conexión (cantidad de paquetes SYN)

tcpdump -ieth0 tcp port 443 and host 115.195.149.98 -w http2.pcap

Captura de pantalla de la solicitud de red configurada como navegador HTTPS

TCPDUMP captura datos de paquetes en el lado del servidor. Puede ver que se realizaron 21 conexiones, una index.html y 20 solicitudes de imágenes.

Conclusión: del análisis de los datos de captura de paquetes, podemos encontrar que HTTP2 solo usa una conexión TCP. En teoría, sin tantos apretones de manos de tres vías de TCP, será más rápido. Los resultados de las pruebas reales también son más rápidos, pero la cantidad de muestras en esta prueba única Son muy pocos y no se pueden utilizar como estándar de evaluación. Solo comprenda el principio. Con respecto al protocolo HTTPS, puede ver el uso de una herramienta de captura de paquetes para analizar mensajes HTTPS.

Después de terminar de escribir el artículo, descubrí que HTTP3 salió el año pasado. Todavía no he investigado mucho sobre HTTP2.

Supongo que te gusta

Origin blog.csdn.net/2301_76787421/article/details/132841277
Recomendado
Clasificación