As variáveis ​​de ambiente HTTP_PROXY, HTTPS_PROXY e NO_PROXY são padrão?


24

Parece que muitos programas foram projetados para ler essas variáveis ​​de ambiente e decidir por qual proxy passar para conectar-se a um recurso na Internet. Esses programas também podem ter suas próprias configurações de proxy individuais, mas se elas não estiverem definidas, elas usarão com prazer essas variáveis ​​de ambiente ...

  • PROXY HTTP
  • HTTPS_PROXY
  • NO_PROXY

Eu só quero saber:

  • Essas variáveis ​​de ambiente são padrão?
  • Existe uma especificação por escrito (pode ser feita pelos fabricantes do SO?) Que recomenda o uso dessas variáveis ​​de ambiente?

1
Eu não sei no_proxy, mas http_proxy (em minúsculas escrito) é padrão
Uwe Burger

@ UweBurger talvez você possa indicar quais programas o utilizam. E isso vale para o interlocutor também. Eu já vi ele ser usado no wget
barlop

Respostas:


17

Concordo com a afirmação de BillThor de que isso é mais uma convenção do que um padrão.
Eu não sei a origem dessas variáveis, mas no caso do HTTP no * nix, muitas convenções parecem se originar do comportamento da biblioteca HTTP libcurl e do programa de linha de comando curl.

Em https://curl.haxx.se/docs/manual.html, há uma descrição das variáveis ​​de ambiente relacionadas ao uso do proxy HTTP que a libcurl / curl entende:

VARIÁVEIS AMBIENTAIS

O Curl lê e entende as seguintes variáveis ​​de ambiente:
http_proxy, HTTPS_PROXY, FTP_PROXY

Eles devem ser definidos para proxies específicos de protocolo. O proxy geral deve ser definido com
ALL_PROXY

Uma lista separada por vírgula de nomes de host que não devem passar por nenhum proxy está definida (apenas um asterisco, '*' corresponde a todos os hosts)
NO_PROXY

Se o nome do host corresponder a uma dessas cadeias, ou se o host estiver no domínio de uma dessas cadeias, as transações com esse nó não serão enviadas por proxy.

Observe que http_proxyestá escrito em minúsculas como o único dentre essas variáveis. Algumas bibliotecas / programas procuram nomes em minúsculas dessas variáveis, enquanto outros procuram nomes em maiúsculas. Para estar seguro, deve-se definir as versões em minúsculas e maiúsculas de cada variável.

Outra questão é que a descrição citada de como os nomes de host são comparados NO_PROXYnão é precisa e não responde às seguintes perguntas:

  • Os valores devem ser nomes de domínio totalmente qualificados (FQDN) , terminando assim com um ponto como foo.example.com.ou não?
  • Deve foo.example.comcorresponder apenas a este domínio ou também deve corresponder a qualquer subdomínio bar.foo.example.com? Se este último também deve corresponder a qualquer subdomínio em qualquer subdomínio como bar.baz.foo.example.com?
  • É .foo.example.compermitido (ponto no início) e, em caso afirmativo, qual deve corresponder?
  • O asterisco ( *) é permitido como parte do valor ( *.example.com, *example.com) e, em caso afirmativo, como é tratado?

A falta de especificação formal leva a confusão e bugs. Aqui é preciso mencionar a biblioteca libproxy , que visa fornecer suporte correto e consistente para a configuração do proxy. Na página inicial do projeto :

O libproxy existe para responder à pergunta: Dado um recurso de rede, como eu o alcanço? Ele lida com todos os detalhes, permitindo que você volte à programação.

Leitura adicional:


O que o libproxy tem a dizer sobre as perguntas que você levanta? Aquele em que estou interessado: ".foo.example.com deve corresponder a foo.example.com ou não?"
Robin Winslow

Eu não faço ideia. Convido
Piotr Dobrogost

13

Isso é mais uma convenção do que um padrão. Provavelmente, ele é suportado por uma ou mais bibliotecas de manipuladores de protocolo que efetivamente fazem as conexões. Java usa propriedades semelhantes em suas bibliotecas de protocolo.

Compreender e usar convenções comuns torna o desenvolvimento muito mais simples. Também ajuda a implementar o princípio da menor surpresa e aumenta a probabilidade de os programas just work.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.