Upgrade
Uso
La cabecera Upgrade permite negociar protocolos en una conexión HTTP/1.1 existente. El cliente envía esta cabecera para proponer el cambio a un protocolo distinto, y el servidor lo acepta respondiendo con 101 Switching Protocols o bien ignora la solicitud y continúa con el protocolo actual.
Entre los destinos de actualización habituales se encuentran WebSocket (websocket), TLS (TLS/1.2, TLS/1.3) y HTTP/2 en claro (h2c). La actualización a WebSocket es la forma más extendida en los despliegues modernos, ya que habilita la comunicación full-duplex entre navegadores y servidores.
La cabecera Connection es obligatoria junto con Upgrade. El emisor establece Connection: upgrade para indicar a los intermediarios que reenvíen la solicitud de actualización en lugar de consumir ellos mismos la conexión.
El servidor también envía Upgrade como parte de una respuesta 426 Upgrade Required. Esto indica al cliente que el servidor se niega a procesar la solicitud con el protocolo actual y enumera el protocolo requerido en el valor de Upgrade.
Nota
La cabecera Upgrade solo se aplica a HTTP/1.1. HTTP/2 y HTTP/3 usan ALPN (negociación de protocolo de capa de aplicación) durante el saludo TLS para seleccionar el protocolo.
websocket
Actualiza la conexión al protocolo WebSocket para una comunicación full-duplex. El cliente incluye las cabeceras Sec-WebSocket-Key y Sec-WebSocket-Version junto con la solicitud de actualización.
h2c
Actualiza la conexión a HTTP/2 en claro (sin TLS). El cliente incluye la cabecera HTTP2-Settings, que contiene los parámetros de conexión HTTP/2 codificados en base64url.
TLS/1.2, TLS/1.3
Actualiza una conexión HTTP no cifrada a una conexión protegida con TLS. Este mecanismo es menos común que establecer TLS directamente.
Ejemplo
Un cliente solicita una actualización a WebSocket. El servidor la acepta respondiendo con 101 Switching Protocols y confirmando el nuevo protocolo.
GET /chat HTTP/1.1
Host: example.re
Connection: upgrade
Upgrade: websocket
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Un cliente propone actualizar a HTTP/2 en claro. La cabecera HTTP2-Settings transporta los parámetros HTTP/2 iniciales codificados en formato base64url.
GET / HTTP/1.1
Host: example.re
Connection: upgrade, HTTP2-Settings
Upgrade: h2c
HTTP2-Settings: AAMAAABkAAQCAAAAAAIAAAAA
Un servidor exige que el cliente use un protocolo distinto. La respuesta 426 Upgrade Required incluye la cabecera Upgrade con el protocolo aceptable.
HTTP/1.1 426 Upgrade Required
Upgrade: TLS/1.3
Connection: upgrade