¿Son estándar las variables de entorno HTTP_PROXY, HTTPS_PROXY y NO_PROXY?

20

Parece que muchos programas están diseñados para leer estas variables de entorno para decidir qué proxy utilizar para conectarse a un recurso en Internet. Esos programas también pueden tener su propia configuración de proxy individual, pero si no están configurados, usarán con gusto estas variables de entorno ...

  • HTTP_PROXY
  • HTTPS_PROXY
  • NO_PROXY

Sólo quiero saber:

  • ¿Son estándar estas variables de entorno?
  • ¿Existe una especificación escrita (puede ser por los fabricantes del sistema operativo?) Que recomienda el uso de estas variables de entorno?
Niko Bellic
fuente
1
No sé no_proxy, pero http_proxy (escrito en minúsculas) es estándar
Uwe Burger
@UweBurger quizás pueda indicar qué programas lo usan ... Y eso también se aplica al interrogador. Lo he visto usado en wget
barlop

Respuestas:

10

Esto es más una convención que un estándar. Es probable que sea compatible con una o más bibliotecas de controladores de protocolo que realmente hacen las conexiones. Java usa propiedades similares en sus bibliotecas de protocolos.

Comprender y usar convenciones comunes hace que el desarrollo sea mucho más simple. También ayuda a implementar el principio de menor sorpresa y hace que los programas sean más propensos a hacerlo just work.

BillThor
fuente
9

Estoy de acuerdo con la declaración de BillThor de que esto es más una convención que un estándar.
No sé el origen de estas variables, pero en el caso de HTTP en * nix, muchas convenciones parecen originarse en el comportamiento de la biblioteca libcurl HTTP y el programa curl de línea de comandos.

En https://curl.haxx.se/docs/manual.html hay una descripción de las variables de entorno relacionadas con el uso del proxy HTTP que entiende libcurl / curl:

VARIABLES DE ENTORNO

Curl lee y comprende las siguientes variables de entorno:
http_proxy, HTTPS_PROXY, FTP_PROXY

Deben configurarse para servidores proxy específicos del protocolo. El proxy general debe establecerse con
ALL_PROXY

Se establece una lista de nombres de host separados por comas que no deberían pasar por ningún proxy (solo un asterisco, '*' coincide con todos los hosts)
NO_PROXY

Si el nombre de host coincide con una de estas cadenas, o si el host está dentro del dominio de una de estas cadenas, las transacciones con ese nodo no se representarán.

Tenga en cuenta que http_proxyse escribe en minúsculas como la única entre estas variables. Algunas bibliotecas / programas buscan nombres en minúsculas de estas variables, mientras que otros buscan nombres en mayúsculas. Para estar seguro, uno debe definir las versiones en minúsculas y mayúsculas de cada variable.

Otro problema es que la descripción citada de cómo se comparan los nombres de host NO_PROXYno es precisa y no responde las siguientes preguntas:

  • ¿Deben los valores ser nombres de dominio totalmente calificados (FQDN) que terminen con un punto como foo.example.com.o no?
  • ¿Debería foo.example.comcoincidir solo con este dominio o también debería coincidir con cualquier subdominio como bar.foo.example.com? Si este último, ¿también debería coincidir con algún subdominio en algún subdominio como bar.baz.foo.example.com?
  • ¿Está .foo.example.compermitido (punto al principio) y, de ser así, ¿qué debería coincidir?
  • ¿Se *permite el asterisco ( ) como parte del valor ( *.example.com, *example.com) y, de ser así, ¿cómo se trata?

La falta de especificación formal conduce a confusión y errores. Aquí hay que mencionar la biblioteca libproxy que tiene como objetivo proporcionar soporte correcto y consistente para la configuración del proxy. Desde la página de inicio del proyecto :

libproxy existe para responder la pregunta: dado un recurso de red, ¿cómo puedo acceder a él? Maneja todos los detalles, lo que le permite volver a la programación.

Otras lecturas:

Piotr Dobrogost
fuente
¿Qué tiene que decir libproxy sobre las preguntas que plantea? El que me interesa: "¿Debería .foo.example.com coincidir con foo.example.com o no?"
Robin Winslow
No tengo idea. Os animo a preguntar en github.com/libproxy/libproxy/issues
Piotr Dobrogost el