Diferencia entre SOCKS y HTTP: ¿cuál elegir?

Publicado:

13 min de lectura

Acar Diveroli
Autor: Acar Diveroli
Comparación de proxy HTTP y SOCKS: icono de sobre y túnel de varios carriles

Al comprar un proxy, la primera decisión técnica suele ser el protocolo: ¿HTTP(S) o SOCKS5? Los dos hacen pasar tu tráfico por otra IP, pero lo hacen en capas distintas y con capacidades distintas. El proxy HTTP reconoce las peticiones web y trabaja con ellas. El proxy SOCKS, en cambio, traslada bytes de un extremo a otro sin fijarse en qué envía cada aplicación.

En este artículo explicamos, paso a paso, cómo funciona cada protocolo, sus diferencias prácticas, los detalles de DNS y cifrado, el soporte de software y cuándo conviene elegir uno u otro. Si quieres profundizar en los detalles técnicos de SOCKS5, nuestro artículo ¿Qué son los proxies SOCKS5? es un buen complemento.

Cómo funciona el proxy HTTP

El proxy HTTP, como su nombre indica, habla el protocolo HTTP. Se comporta de dos formas distintas según el caso:

  • En las peticiones HTTP sin cifrar, el cliente envía la petición completa al proxy. El proxy la lee, la reenvía al destino y devuelve la respuesta. Durante este proceso puede ver, almacenar en caché o modificar las cabeceras.
  • En las peticiones HTTPS, el cliente envía primero una petición CONNECT destino.com:443 al proxy. El proxy abre una conexión TCP con el destino y, a partir de ahí, solo transfiere bytes cifrados. No puede ver el contenido. Este método está definido en RFC 9110.

Es decir, en la web actual, dominada por HTTPS, un proxy HTTP no accede al contenido del sitio, solo al nombre de dominio y al puerto al que te conectas.

El camino que sigue una petición HTTPS a través del proxy es el siguiente:

  1. El cliente se conecta al proxy por TCP y envía CONNECT destino.com:443 HTTP/1.1; si hace falta, se autentica con la cabecera Proxy-Authorization.
  2. El proxy se conecta al destino y devuelve al cliente 200 Connection Established.
  3. El cliente realiza el protocolo de enlace TLS con el destino dentro de esa conexión. La verificación del certificado ocurre entre el cliente y el destino.
  4. El tráfico HTTP cifrado fluye por el túnel; el proxy solo transporta bytes.

La expresión «proxy HTTPS» suele referirse a esta capacidad de tunelización; la conexión que se establece con el propio proxy suele ser HTTP sin cifrar. Por eso las direcciones de proxy empiezan con http:// incluso para sitios HTTPS.

Cómo funciona el proxy SOCKS

SOCKS funciona independientemente del protocolo de aplicación. El cliente le dice al proxy «conéctate a esta dirección, en este puerto»; el servidor SOCKS establece la conexión y transfiere el tráfico entre ambas partes tal cual. No le importa si ese tráfico es web, un juego, correo electrónico o una base de datos.

SOCKS5, la versión que se usa hoy en día, está definida en RFC 1928 y añade tres características importantes respecto al antiguo SOCKS4:

  • Autenticación (usuario y contraseña, RFC 1929),
  • Soporte de UDP (para tráfico basado en UDP como juegos, llamadas de voz o DNS),
  • Conexión por nombre de dominio, es decir, que la resolución DNS se pueda hacer en el lado del proxy; además de soporte para direcciones IPv6.

La conexión SOCKS5 también se establece en varios pasos: el cliente indica los métodos de autenticación que admite, el servidor elige uno, se autentica y a continuación el cliente envía la dirección y el puerto de destino. Una vez establecida la conexión, los datos en bruto fluyen en ambas direcciones. Este protocolo de enlace se reduce a unos pocos bytes, más pequeño que las cabeceras HTTP.

Diferencias clave

CriterioProxy HTTP(S)Proxy SOCKS5
Capa en la que operaCapa de aplicación (HTTP)Capa de sesión, independiente del protocolo
Tráfico que transportaPeticiones webCualquier tráfico TCP y UDP
Soporte de UDPNo
Acceso a las cabeceras de la peticiónSí, en HTTP sin cifrarNo
Caché y filtrado de contenidoPosible en HTTP sin cifrarNo es posible
AutenticaciónSí (Proxy-Authorization)Sí (usuario/contraseña)
Resolución DNSEn HTTPS, el dominio de destino se envía al proxyPuede hacerse en el cliente o en el proxy
Sobrecarga del protocolo de enlaceCabeceras HTTPUnos pocos bytes
Soporte de softwareNavegadores, librerías HTTP, casi cualquier herramientaNavegadores, cURL, aplicaciones de escritorio, clientes de juegos; algunas librerías requieren un paquete adicional
Uso típicoWeb scraping, SEO, seguimiento de preciosJuegos, aplicaciones de escritorio, protocolos que no son web

Por qué importa la resolución DNS

Una de las diferencias menos conocidas —pero más importantes— entre ambos protocolos es dónde se traduce el nombre de dominio a una IP.

  • En el proxy HTTP, la petición CONNECT destino.com:443 envía el dominio al proxy; es el proxy quien hace la resolución. No sale ninguna consulta hacia el servidor DNS del cliente.
  • En SOCKS5 hay dos opciones. El cliente puede resolver el dominio él mismo y enviar la IP (socks5:// en cURL), o dejar la resolución en manos del proxy (socks5h:// en cURL). Con la primera opción, la consulta DNS sale de tu propia red; esto significa que se puede ver desde tu red local a qué sitios te conectas, y que el sitio de destino te asignará un servidor lejano al proxy en lugar del más cercano a ti.

Regla práctica: cuando uses SOCKS5, prefiere la resolución remota. En las librerías esto suele configurarse con el esquema socks5h o una opción de «remote DNS»; algunas herramientas hacen resolución local por defecto y esta diferencia pasa desapercibida.

¿Cuál va por delante en velocidad?

En términos generales, SOCKS5 tiene menos sobrecarga porque hace menos trabajo: no interpreta las peticiones, solo las transfiere. En tráfico HTTPS, la diferencia se reduce bastante porque el proxy HTTP también se limita a transferir bytes después del túnel CONNECT.

En la práctica, la velocidad la determinan más la ubicación del servidor proxy, el tipo de IP y la calidad de la línea que el protocolo. Elegir un punto de salida cercano al servidor de destino marca mucha más diferencia que cambiar de protocolo. Explicamos cómo se mide esta diferencia en los juegos en nuestro artículo Cómo solucionar el ping y la pérdida de paquetes en los juegos, y el efecto del tipo de IP en la velocidad en Diferencia entre proxies residenciales y de centro de datos.

¿Hay diferencia en seguridad y privacidad?

Ninguno de los dos protocolos cifra el tráfico. El cifrado viene del protocolo que usa el servicio de destino: HTTPS en la web, SSH en una shell remota, TLS en el correo electrónico. Por eso decir que «SOCKS5 es más seguro» o que «el proxy HTTP es más seguro» es incorrecto; ambos son igual de neutrales como transportistas.

Hay dos puntos que sí difieren:

  • Visibilidad en HTTP sin cifrar. Si te conectas a un sitio HTTP sin cifrar con un proxy HTTP, este puede leer la petición completa; SOCKS5 transporta los mismos bytes, solo que no los interpreta. Es decir, no hay diferencia en privacidad: en ambos casos el tráfico va sin cifrar.
  • Fuga de DNS. Como se explicó antes, si haces resolución local en SOCKS5, se puede ver desde tu red local a qué sitios accedes. En el proxy HTTP este riesgo no existe, porque el dominio siempre se envía al proxy.

Si te interesa la diferencia de cifrado entre un proxy y una VPN, puedes consultar nuestro artículo Diferencia entre proxy y VPN.

¿Cuándo elegir un proxy HTTP?

  • Web scraping y automatización. Librerías de Python como Requests, HTTPX y AIOHTTP admiten el proxy HTTP sin necesidad de paquetes adicionales. Tratamos las diferencias entre estas librerías en nuestra comparación de HTTPX, Requests y AIOHTTP; el lado de Node.js lo mostramos en cURL en JavaScript.
  • Si solo enrutas tráfico web. En el navegador, en herramientas de SEO o en software de seguimiento de precios, el proxy HTTP ofrece la compatibilidad más amplia.
  • Herramientas de línea de comandos. Para pruebas rápidas con cURL y wget, el proxy HTTP funciona directamente. Recordemos que wget no tiene soporte de SOCKS integrado; los detalles están en nuestro artículo Uso de proxy con wget.
  • Automatización de navegador. Puppeteer, Playwright y Selenium admiten autenticación por usuario y contraseña con proxy HTTP; con SOCKS5, Chrome no admite esta autenticación.
  • Red corporativa y caché. Almacenar en caché o filtrar tráfico HTTP sin cifrar solo es posible con un proxy HTTP.

Para tráfico web, la opción adecuada son los paquetes de Proxies HTTPS.

¿Cuándo elegir un proxy SOCKS5?

  • Juegos y aplicaciones de escritorio. Los clientes de juegos no son navegadores web; se comunican con sus propios protocolos, a menudo por UDP. Solo SOCKS5 puede transportar este tráfico. Explicamos las configuraciones del lado de los juegos en nuestras guías de Knight Online y Silkroad Online.
  • Protocolos que no son web. SSH, FTP, correo electrónico o servicios TCP personalizados.
  • Forzar una aplicación a usar el proxy. Los programas que no ofrecen una opción de proxy se pueden enrutar por SOCKS5 con herramientas como Proxifier. Puedes encontrar la configuración en nuestra guía de Proxifier.
  • Evitar la fuga de DNS. Cuando quieres que la resolución del dominio se haga en el lado del proxy (como con el esquema socks5h:// en cURL).
  • Baja sobrecarga. En aplicaciones que abren muchas conexiones cortas, el pequeño protocolo de enlace de SOCKS5 puede marcar una diferencia medible.

Para estos escenarios, puedes revisar los paquetes de Proxies SOCKS5.

Soporte de software: ¿qué admite cada herramienta?

HerramientaProxy HTTP(S)Proxy SOCKS5
Chrome, Firefox, EdgeSí (en Chrome no hay autenticación por contraseña)
cURLSí (socks5://, socks5h://)
wgetNo
Python RequestsIntegradoCon requests[socks]
Python HTTPXIntegradoCon httpx[socks]
Node.js undici / fetchProxyAgentCon un paquete adicional como socks-proxy-agent
Puppeteer / PlaywrightSí (autenticación por contraseña limitada)
Proxifier
Clientes SSHCon ProxyCommandCon ProxyCommand, soporte nativo
Clientes de juegosNormalmente noCon una herramienta de enrutamiento

Como muestra la tabla, el soporte del proxy HTTP es más extendido; SOCKS5, donde se admite, transporta una gama de tráfico más amplia.

¿Puede un mismo proxy admitir los dos protocolos?

Sí. Muchos proveedores ofrecen la misma IP tanto por un puerto HTTP como por uno SOCKS5; el esquema de la dirección de conexión determina el protocolo. Probar el mismo proxy de las dos formas con cURL es la manera más rápida de ver la diferencia:

bash
# A través de proxy HTTP
curl -x "http://kullanici:parola@pr.proxynet.io:8000" https://httpbin.org/ip

# A través de SOCKS5, con resolución DNS en el proxy
curl -x "socks5h://kullanici:parola@pr.proxynet.io:1080" https://httpbin.org/ip

Los dos comandos deben devolver la misma IP de salida. La dirección y el puerto varían según tu plan; puedes encontrar los valores correctos en tu panel de cliente. Para otras opciones de proxy en cURL, consulta nuestro artículo Cómo usar un proxy con cURL.

Si quieres hacer las mismas dos pruebas en Python con Requests:

python
import requests

HTTP_PROXY = "http://kullanici:parola@pr.proxynet.io:8000"
SOCKS_PROXY = "socks5h://kullanici:parola@pr.proxynet.io:1080"  # pip install "requests[socks]"

for proxy in (HTTP_PROXY, SOCKS_PROXY):
    r = requests.get("https://httpbin.org/ip", proxies={"http": proxy, "https": proxy}, timeout=20)
    print(proxy.split("://")[0], r.json()["origin"])

Guía de decisión

Tu necesidadRecomendación
Web scraping con Python o Node.jsHTTP(S)
Automatización de navegador, proxy con autenticación por contraseñaHTTP(S)
Herramientas de SEO, seguimiento de precios, verificación de anunciosHTTP(S)
Cliente de juegos, tráfico UDPSOCKS5
SSH, FTP, correo electrónico, servicio TCP personalizadoSOCKS5
Aplicación de escritorio sin opción de proxySOCKS5 + Proxifier
Que las consultas DNS se queden en el lado del proxySOCKS5 (resolución remota) o HTTP(S)
Descargas con wgetHTTP(S)

Preguntas frecuentes

¿SOCKS5 cifra el tráfico?

No. SOCKS5 transporta el tráfico tal cual. La privacidad de la conexión la aporta el cifrado que usa el servicio de destino (por ejemplo, HTTPS o SSH). Lo mismo ocurre con el proxy HTTP.

¿Cuál debería usar en el navegador?

Si solo accedes a sitios web, los dos funcionan. El proxy HTTP tiene un soporte más extendido y todos los navegadores admiten la autenticación por contraseña; SOCKS5 ofrece ventaja cuando quieres dejar la resolución DNS en manos del proxy. Para la gestión por perfiles a nivel de navegador, consulta nuestras guías de SwitchyOmega y configuración de proxy en Firefox.

¿Puedo usar SOCKS5 en Python?

Sí, aunque según la librería hace falta un paquete adicional. Para Requests se instala requests[socks], para HTTPX httpx[socks]; después se usa el esquema socks5:// o socks5h:// en la dirección del proxy.

¿Todavía se usa SOCKS4?

Algunas herramientas antiguas lo admiten, pero al no tener autenticación, soporte de UDP ni de nombres de dominio, no se recomienda para instalaciones nuevas. Si un proveedor dice «SOCKS», hoy en día se refiere a SOCKS5.

¿Son lo mismo el proxy HTTP y el proxy HTTPS?

En el uso cotidiano, sí: «proxy HTTPS» significa un proxy HTTP que puede acceder a sitios HTTPS mediante un túnel CONNECT. Técnicamente también existe una forma en la que se habla con el propio proxy por TLS, pero no es habitual y la mayoría de los clientes no la admiten.

¿Cómo sé qué protocolo admite mi proxy?

En el panel del proveedor, la información de puertos suele darse por protocolo; HTTP y SOCKS5 usan puertos diferentes. Si no estás seguro, prueba los dos comandos de cURL de arriba: intentar conectarse con el protocolo equivocado da un error de conexión o una respuesta sin sentido, mientras que el protocolo correcto devuelve la IP.

En resumen

Si enrutas tráfico web, el proxy HTTP(S) ofrece la compatibilidad más amplia y funciona desde el primer momento en la mayoría de las herramientas de scraping. Si se trata de juegos, aplicaciones de escritorio, tráfico UDP o protocolos que no son web, SOCKS5 es la única opción correcta; en ese caso, no olvides dejar la resolución DNS en el lado del proxy. La diferencia de velocidad la determina más la ubicación del proxy y el tipo de IP que el protocolo. Para paquetes que admiten ambos protocolos, puedes consultar nuestras soluciones de proxy.