web-dev-qa-db-fra.com

Les variables d'environnement HTTP_PROXY, HTTPS_PROXY et NO_PROXY sont-elles standard?

Il semble que de nombreux programmes sont conçus pour lire ces variables d'environnement afin de décider du proxy à utiliser pour se connecter à une ressource sur Internet. Ces programmes peuvent également avoir leurs propres paramètres de proxy individuels, mais s'ils ne sont pas définis, ils utiliseront ces variables d'environnement avec plaisir ...

  • HTTP PROXY
  • HTTPS_PROXY
  • NO_PROXY

Je veux juste savoir:

  • Ces variables d'environnement sont-elles standard?
  • Existe-t-il une spécification écrite (pouvant être fournie par les fabricants de système d'exploitation?) Qui recommande l'utilisation de ces variables d'environnement?
18
Niko Bellic

C'est plus une convention qu'un standard. Il est probablement pris en charge par une ou plusieurs bibliothèques de gestionnaires de protocole qui établissent les connexions. Java utilise des propriétés similaires dans ses bibliothèques de protocoles.

Comprendre et utiliser des conventions communes rend le développement beaucoup plus simple. Cela permet également de mettre en œuvre le principe de la moindre surprise et de rendre les programmes plus susceptibles de just work.

9
BillThor

Je souscris à l'affirmation de BillThor selon laquelle il s'agit davantage d'une convention que d'une norme.
Je ne connais pas l'origine de ces variables, mais dans le cas de HTTP sur * nix, de nombreuses conventions semblent provenir du comportement de libcurl Bibliothèque HTTP et programme de ligne de commande curl.

Sur https://curl.haxx.se/docs/manual.html , une description des variables d’environnement liées à l’utilisation du proxy HTTP est comprise par libcurl/curl:

VARIABLES D'ENVIRONNEMENT

Curl lit et comprend les variables d'environnement suivantes:
http_proxy, HTTPS_PROXY, FTP_PROXY

Ils doivent être définis pour les mandataires spécifiques au protocole. La procuration générale doit être définie avec
ALL_PROXY

Une liste de noms d'hôtes séparés par des virgules qui ne doivent pas passer par un proxy est définie (seul un astérisque, '*' correspond à tous les hôtes)
NO_PROXY

Si le nom de l'hôte correspond à l'une de ces chaînes ou si l'hôte se trouve dans le domaine de l'une de ces chaînes, les transactions avec ce nœud ne seront pas transmises par proxy.

Veuillez noter que http_proxy est orthographié en minuscule comme la seule parmi ces variables. Certaines bibliothèques/programmes recherchent des noms en minuscules pour ces variables alors que d'autres recherchent des noms en majuscules. Pour être sûr , définissez à la fois les versions minuscule et majuscule de chaque variable.

Un autre problème est que la description citée de la façon dont les noms d’hôte sont comparés à NO_PROXY n’est pas précise et ne répond pas aux questions suivantes:

  • Les valeurs doivent-elles être des noms de domaine pleinement qualifiés (FQDN) se terminant ainsi par un point tel que foo.example.com. ou non?
  • foo.example.com doit-il correspondre uniquement à ce domaine ou doit-il également correspondre à un sous-domaine tel que bar.foo.example.com? Si ce dernier doit alors correspondre également à un sous-domaine dans un sous-domaine tel que bar.baz.foo.example.com?
  • Est-ce que .foo.example.com (point au début) est autorisé et si oui, à quoi doit-il correspondre?
  • L'astérisque (*) est-il autorisé en tant que partie de la valeur (*.example.com, *example.com) et si oui, comment est-il traité?

L'absence de spécification formelle mène à la confusion et à des bugs. Ici, il faut mentionner la bibliothèque libproxy qui vise à fournir un support correct et cohérent pour la configuration du proxy. Depuis la page d'accueil du projet :

libproxy existe pour répondre à la question: Étant donné une ressource réseau, comment puis-je l'atteindre? Il gère tous les détails, vous permettant de revenir à la programmation.

Lectures complémentaires:

8
Piotr Dobrogost