CONNECT
Uso
Una solicitud CONNECT indica a un proxy HTTP que establezca una conexión TCP con el host y el puerto especificados y que, a continuación, retransmita bytes en bruto en ambas direcciones. El destino de la solicitud usa la forma de autoridad (host:port) en lugar de una ruta.
El uso principal de CONNECT es la tunelización HTTPS. Cuando un cliente situado tras un proxy necesita llegar a un sitio HTTPS, la secuencia funciona así:
Dado que el proxy reenvía bytes en bruto una vez establecido el túnel, no tiene visibilidad sobre el tráfico cifrado. Este es el mecanismo que usan los proxies corporativos y de red para permitir el acceso HTTPS a servidores externos.
Si el proxy requiere autenticación, el cliente incluye una cabecera Proxy-Authorization en la solicitud CONNECT. Unas credenciales ausentes o no válidas dan lugar a una respuesta 407 Proxy Authentication Required.
El estándar WHATWG Fetch incluye CONNECT entre los métodos prohibidos, lo que impide que JavaScript emita solicitudes CONNECT a través de las API del navegador.
En HTTP/2 y HTTP/3, CONNECT crea un túnel sobre un único flujo en lugar de sobre toda la conexión TCP. La especificación de HTTP/2 define el CONNECT básico para flujos individuales. La actualización del protocolo extended CONNECT añade un pseudoencabezado :protocol que habilita WebSockets y otros protocolos sobre una conexión multiplexada, con soporte tanto en HTTP/2 como en HTTP/3. El túnel de flujo básico y el extended CONNECT son complementarios: uno proporciona tunelización en bruto y el otro habilita protocolos distintos de TCP sobre conexiones multiplexadas.
Túnel HTTPS a través de un proxy
Un cliente solicita un túnel TLS hacia example.com en el puerto 443 a través de un proxy. El proxy autentica al cliente mediante la cabecera Proxy-Authorization, abre la conexión TCP y confirma con 200 OK.
Solicitud
CONNECT example.com:443 HTTP/1.1
Host: example.com:443
Proxy-Authorization: Basic dXNlcjpwYXNz
Respuesta
HTTP/1.1 200 Connection Established
Tras recibir la respuesta 200, el cliente inicia el handshake TLS con example.com a través del túnel abierto. El proxy reenvía todos los datos posteriores sin inspeccionar ni modificar el contenido.
Túnel sin autenticación
Cuando el proxy no requiere credenciales, la solicitud contiene únicamente el host y el puerto de destino.
Solicitud
CONNECT example.com:443 HTTP/1.1
Host: example.com:443
Respuesta
HTTP/1.1 200 Connection Established
CORS
CONNECT es un método prohibido por CORS. Los navegadores bloquean todos los intentos de enviar CONNECT mediante API del navegador como fetch() y XMLHttpRequest.
Tunelización HTTP
La tunelización HTTP encapsula tráfico no HTTP dentro de mensajes HTTP, lo que permite que protocolos como HTTPS, SSH y FTP atraviesen proxies HTTP. CONNECT es el mecanismo principal para establecer esos túneles. El proxy abre una conexión TCP en bruto con el host y el puerto de destino y, a continuación, retransmite bytes en ambas direcciones sin inspeccionar el contenido.
Si no hay un proxy entre el cliente y el servidor, CONNECT no es necesario. Los clientes se conectan a los servidores directamente usando el protocolo de destino.
Seguridad
Los proxies abiertos que aceptan CONNECT hacia puertos arbitrarios permiten abusos: retransmisión de spam mediante SMTP (puerto 25), escaneo de puertos de redes internas y elusión de los controles de acceso a la red. Los proxies de producción restringen CONNECT al puerto 443 (HTTPS) o a una lista blanca de destinos aprobados.
OWASP identifica el CONNECT sin restricciones como un riesgo de seguridad. El estándar WHATWG Fetch clasifica CONNECT como método prohibido, lo que impide que los navegadores envíen solicitudes CONNECT directamente mediante fetch() o XMLHttpRequest.