Pregunta

Estoy construyendo una biblioteca WebClient.Ahora estoy implementando una función de proxy, así que estoy investigando un poco y vi algo de código usando el CONNECT Método para solicitar una URL.

Pero al comprobarlo en mi navegador web, no utiliza el CONNECT método pero llama al método GET en su lugar.

Entonces estoy confundido.¿Cuándo debo utilizar ambos métodos?

¿Fue útil?

Solución

Una solicitud CONNECT insta a su proxy a establecer un túnel HTTP hasta el punto final remoto.Generalmente ¿Se usa para conexiones SSL, aunque también se puede usar con HTTP (usado con fines de encadenamiento de proxy y tunelización)?

CONNECT www.google.com:443 

La línea anterior abre una conexión desde su proxy a www.google.com en el puerto 443.Después de esto, el contenido enviado por el cliente es reenviado por el proxy a www.google.com:443.

Si un usuario intenta recuperar una página http://www.google.com, el proxy puede enviar exactamente la misma solicitud y obtener una respuesta para él, en su nombre.

Con SSL (HTTPS), solo los dos puntos finales remotos entienden las solicitudes y el proxy no puede descifrarlas.Por lo tanto, todo lo que hace es abrir ese túnel usando CONNECT y permite que los dos puntos finales (servidor web y cliente) se comuniquen entre sí directamente.

Encadenamiento de proxy:

Si está encadenando 2 servidores proxy, esta es la secuencia de solicitudes que se emitirán.

GET1 is the original GET request (HTTP URL)
CONNECT1 is the original CONNECT request (SSL/HTTPS URL or Another Proxy)

User Request ==CONNECT1==> (Your_Primary_Proxy ==CONNECT==> AnotherProxy-1 ... ==CONNECT==> AnotherProxy-n) ==GET1(IF is http)/CONNECT1(IF is https)==> Destination_URL

Otros consejos

TL;DR un cliente web utiliza CONNECT sólo cuando sabe que habla con un proxy y el URI final comienza con https://.

Cuando un navegador dice:

CONNECT www.google.com:443 HTTP/1.1

significa:

Hola proxy, abre una conexión TCP sin formato a Google;Cualquier siguiente bytes que escriba, solo repite sobre esa conexión sin ninguna interpretación.Ah, y una cosa más.Haz eso solo si hablas con Google directamente, pero si usas otro proxy tú mismo, solo les dices lo mismo CONNECT.

Tenga en cuenta que esto no dice nada sobre TLS (https).De hecho CONNECT es ortogonal a TLS;puedes tener sólo uno, puedes tener otros o puedes tener ambos.

Dicho esto, la intención de CONNECT es permitir Sesión TLS cifrada de extremo a extremo, por lo que los datos son ilegibles para un proxy (o una cadena de proxy completa).Funciona incluso si un proxy no entiende TLS en absoluto, porque CONNECT se puede emitir dentro de HTTP simple y no requiere del proxy nada más que copiar bytes sin procesar.

Pero la conexión al primer proxy puede ser TLS (https) aunque implica un doble cifrado del tráfico entre usted y el primer proxy.

Evidentemente no tiene sentido CONNECT al hablar directamente con el servidor final.Simplemente comienza a hablar TLS y luego emite HTTP GET.Los servidores finales normalmente desactivan CONNECT en total.

A un apoderado, CONNECT El soporte añade riesgos de seguridad.Se puede pasar cualquier dato CONNECT, incluso intento de piratería ssh a un servidor en 192.168.1.*, incluso SMTP enviando spam.El mundo exterior ve estos ataques como conexiones TCP regulares iniciadas por un proxy.No les importa cuál es el motivo, no pueden comprobar si HTTP CONNECT tiene la culpa.Por lo tanto, corresponde a los apoderados protegerse contra el uso indebido.

Como regla general, GET se utiliza para HTTP simple y CONNECT para HTTPS.

Sin embargo, hay más detalles, por lo que probablemente quieras leer los RFC-s relevantes.

http://www.ietf.org/rfc/rfc2068.txt http://www.ietf.org/rfc/rfc2817.txt

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top