Nyx con Ejemplos

Frames de HTTP/2

HTTP/2 es un protocolo binario. Cada mensaje es un frame tipado con un encabezado de 9 bytes. DATA lleva los cuerpos, HEADERS lleva metadata comprimida con HPACK, SETTINGS negocia los parámetros de la conexión, WINDOW_UPDATE controla el flujo.

Código

// nyx-http2 frames — HEADERS, DATA, SETTINGS frame types

import "std/http2"

fn main() -> int {
    // HTTP/2 is a binary protocol with typed frames.
    // Each frame has a 9-byte header + payload.

    print("HTTP/2 frame types:")
    print("  H2_DATA      = " + int_to_string(H2_DATA) + "  — request/response bodies")
    print("  H2_HEADERS   = " + int_to_string(H2_HEADERS) + "  — HPACK-compressed headers")
    print("  H2_SETTINGS  = " + int_to_string(H2_SETTINGS) + "  — connection parameters")
    print("  H2_PING      = " + int_to_string(H2_PING) + "  — keep-alive")
    print("  H2_GOAWAY    = " + int_to_string(H2_GOAWAY) + "  — graceful shutdown")
    print("  H2_WINDOW_UPDATE = " + int_to_string(H2_WINDOW_UPDATE) + "  — flow control")

    print("")
    print("Connection preface: client sends 24-byte magic string")
    print("\"PRI * HTTP/2.0\\r\\n\\r\\nSM\\r\\n\\r\\n\" followed by SETTINGS frame.")
    print("")
    print("Each request opens a new stream_id (odd for client-initiated).")
    print("HPACK compresses repeated headers: Host, User-Agent, etc.")
    return 0
}

Salida

HTTP/2 frame types:
  H2_DATA      = 0  — request/response bodies
  H2_HEADERS   = 1  — HPACK-compressed headers
  H2_SETTINGS  = 4  — connection parameters
  H2_PING      = 6  — keep-alive
  H2_GOAWAY    = 7  — graceful shutdown
  H2_WINDOW_UPDATE = 8  — flow control

Connection preface: client sends 24-byte magic string
"PRI * HTTP/2.0\r\n\r\nSM\r\n\r\n" followed by SETTINGS frame.

Each request opens a new stream_id (odd for client-initiated).
HPACK compresses repeated headers: Host, User-Agent, etc.

Explicación

Mientras que HTTP/1.1 era un protocolo de texto que se podía depurar con telnet, HTTP/2 es binario y está organizado en frames. El encabezado de 9 bytes codifica la longitud (24 bits), el tipo (8 bits), los flags (8 bits) y un identificador de stream de 31 bits. Entender los tipos de frame es la clave para leer trazas de HTTP/2: SETTINGS se envía al inicio para negociar límites, HEADERS abre un stream, DATA lleva el cuerpo, WINDOW_UPDATE evita que emisores rápidos saturen a receptores lentos, y GOAWAY le indica cortésmente al peer que deje de abrir nuevos streams.

← Anterior Siguiente →

Source: examples/by-example/95-http2-frames.nx