Análisis del código fuente OkHttp (3): proxy y enrutamiento
Cuando miré por primera vez el código fuente de OkHttp, fue muy difícil leer el código fuente debido a una comprensión insuficiente de Dirección, Ruta, Proxy, ProxySelector, RouteSelector, etc. Después de leerlo varias veces, Todavía tengo problemas para encontrar conexiones reutilizadas, crear conexiones, conectarse a servidores y conectarse. La lógica de la creación de conexiones de túnel y servidor proxy no está clara. Este artículo decidió ordenar los conceptos y principios básicos relacionados.
● HTTP/1.1(HTTPS)
● HTTP/2
● SPDY
a/p/63ba15d8877a
1. Construya el objeto de dirección
2. Lea la configuración del proxy: resetNextProxy
3. Analice la dirección del socket del servidor de destino: resetNextInetSocketAddress
4. Seleccione Ruta para crear una RealConnection
5. Determine el protocolo
Método de prueba:
● Abra Charles en la PC, configure el puerto, cómo configurar el proxy, hay tutoriales en Internet, relativamente simples;
● Encienda WIFI en su teléfono móvil, seleccione el WIFI conectado para modificar la red, especifique el servidor proxy en la configuración en las opciones avanzadas, el ip es la ip de la PC y el puerto es el puerto que Charles acaba de configurar;
● OkHttpClient inicia una solicitud sin especificar un proxy.
1. Construya el objeto de dirección
2. Lea la configuración del proxy: resetNextProxy
3. Analice la dirección del socket del servidor de destino: resetNextInetSocketAddress
4. Seleccione Ruta para crear una RealConnection
5. Cree un túnel
Dado que es una solicitud https de proxy, se requiere un proxy de túnel.
Como se puede ver en la figura, establecer un túnel en realidad es enviar una solicitud CONNECT. El encabezado incluye el campo Proxy-Connection y el nombre del host de destino. El contenido de la solicitud es similar:
<. p> 6. Determine el protocolo y el protocolo de enlace SSL1. Los servidores proxy se pueden dividir en servidores proxy HTTP y servidores proxy SOCK
2. Los servidores proxy HTTP se dividen a su vez en servidores proxy ordinarios y túneles. los servidores proxy ordinarios son adecuados para la transmisión de texto sin formato, es decir, túneles http. El agente solo reenvía paquetes TCP y es adecuado para la transmisión cifrada, es decir, https/http2;
3. Los agentes SOCK son dividido en SOCK4 y SOCK5 La diferencia es que este último admite la transmisión UDP y es adecuado para herramientas de chat de agentes como QQ;
p>
4. El proxy no está configurado (OkHttpClient no está especificado). y el sistema no lo configura), y el cliente establece directamente una conexión TCP con el servidor de destino
5. El proxy está configurado y, al enviar solicitudes http, el cliente El cliente establece una conexión TCP; con el servidor proxy Si el servidor proxy es un nombre de dominio, el nombre de dominio del servidor proxy se interpreta y el servidor proxy resuelve el nombre de dominio del servidor proxy
6. El proxy está configurado; hasta solicitudes de proxy https/http2 El cliente establece una conexión TCP con el servidor proxy, envía una solicitud CONNECT para establecer un túnel con el servidor proxy y realiza un protocolo de enlace SSL. El servidor proxy no analiza los datos y solo reenvía TCP. paquetes.
Cómo utilizar correctamente el proxy HTTP
Proxy y enrutamiento en OkHttp3
Principio e implementación del proxy HTTP (1)