Quel est le «bon» format pour la variable d'environnement HTTP_PROXY? Casquettes ou pas de casquettes?

25

J'ai rencontré les deux http_proxyet HTTP_PROXY. Les deux formes sont-elles équivalentes? L'un d'eux a-t-il priorité sur l'autre?

Mihai
la source

Réponses:

27

Il n'y a pas d'autorité centrale qui attribue une signification officielle aux variables d'environnement avant que les applications puissent les utiliser. POSIX définit la signification de certaines variables ( PATH, TERM...) et énumère plusieurs autres d'une manière non normative comme dans l' usage commun, tous en majuscules. http_proxyet les amis n'en font pas partie.

Contrairement à toutes essentiellement variables d'environnement conventionnelles utilisées par de nombreuses applications, http_proxy, https_proxy, ftp_proxyet no_proxysont souvent minuscules. Je ne me souviens d'aucun programme qui ne les comprend qu'en majuscules, je ne trouve même pas celui qui les essaie en majuscules. De nombreux programmes utilisent uniquement la variante en minuscule, y compris lynx, wget, curl, perl LWP, perl WWW :: Search, python urllib / urllib2, etc. Donc, pour ces variables, la bonne forme est celle en minuscules.

Le nom en minuscule remonte au moins à la bibliothèque CERN libwww 2.15 en mars 1994 (merci à Stéphane Chazelas de l'avoir localisé). Je ne sais pas ce qui a motivé le choix des minuscules, ce qui aurait été inhabituel à l'époque.

Gilles 'SO- arrête d'être méchant'
la source
1
Unlike basically all conventional environment variables used by many applications, http_proxy, https_proxy, ftp_proxy and no_proxy are commonly lowercase. I don't recall any program that only understands them in uppercase-> Pour mémoire, je viens de découvrir que le docker 17.04.0-ce ne rend hommage qu'à NO_PROXY.
jaume
les scripts cloudformation (cfn-signal, cfn-init) utilisent la variante majuscule HTTPS_PROXY. docker utilise également la variante majuscule.
Felipe Alvarez
les minuscules ne fonctionneraient pas pour moi lorsque j'essayais d'ajouter un référentiel ppa. sudo -E apt-add-repository ppa:xxxxx/xxxx. je devais unset https_proxyetexport HTTPS_PROXY=http://a.b.c.d:xxxx
Mheni
7

Il n'y a pas de standard et les versions majuscules et minuscules sont utilisées selon l'application (voir également HTTPS_PROXY, ALL_PROXY, NO_PROXY).

Par exemple:

boucle

ENVIRONMENT VARIABLES

  Curl reads and understands the following environment variables:

        http_proxy, HTTPS_PROXY, FTP_PROXY

  They should be set for protocol-specific proxies. General proxy should be
  set with

        ALL_PROXY

  A comma-separated list of host names that shouldn't go through any proxy is
  set in (only an asterisk, '*' matches all hosts)

        NO_PROXY

git

http.proxy
   Override the HTTP proxy, normally configured using the http_proxy, https_proxy, 
   and all_proxy environment variables (see curl(1)). [..]

Python

urllib.request.getproxies() prend en charge les variantes en minuscules et en majuscules.

Il mentionne également un problème de sécurité:

Si la variable d'environnement REQUEST_METHOD est définie, ce qui indique généralement que votre script s'exécute dans un environnement CGI, la variable d'environnement HTTP_PROXY (majuscule _PROXY) sera ignorée. En effet, cette variable peut être injectée par un client à l'aide de l'en-tête HTTP «Proxy:». Si vous devez utiliser un proxy HTTP dans un environnement CGI, utilisez explicitement ProxyHandler ou assurez-vous que le nom de la variable est en minuscules (ou au moins le suffixe _proxy).


Certaines applications permettent NO_PROXYde contenir des étoiles / plages ip tandis que d'autres ne le font pas.


Alors

export https_proxy=$http_proxy HTTP_PROXY=$http_proxy HTTPS_PROXY=$http_proxy NO_PROXY=$no_proxy

devrait vous avoir couvert.

laktak
la source
0

La convention consiste à utiliser toutes les variables d'environnement capps lors de leur exportation, de sorte que lorsque vous écrivez des scripts shell, vous pouvez utiliser des noms de variables en minuscules sans vous soucier des collisions de noms avec d'autres programmes. Bien sûr, il s'agit uniquement d'une convention, il n'y a aucune restriction technique sur la limitation des noms des variables d'environnement, de sorte que la version en minuscules pourrait être utilisée dans certains cas, mais la meilleure pratique est en majuscules, et rappelez-vous qu'elles sont sensibles à la casse afin qu'elles puissent avoir différentes valeurs.

hildred
la source
Contrairement à la plupart (essentiellement, toutes) des variables d'environnement conventionnelles, http_proxyet ses frères et sœurs sont généralement en minuscules.
Gilles 'SO- arrête d'être méchant'
@Gilles ce serait un bug.
hildred
3
Non, ça ne l'est pas. Vous avez raison, il existe une convention pour utiliser les majuscules pour les variables d'environnement, mais ce n'est qu'une convention, pas une règle absolue. La norme de facto pour les variables d'environnement http_proxyet les amis doit être orthographiée en minuscules, en violation d'une convention. L'utilisation d'une application HTTP_PROXYserait un bug car elle serait incompatible avec le reste du monde.
Gilles 'SO- arrête d'être méchant'
1
snarf nécessite des majuscules et il y a un rapport de bogue contre wget.
hildred
1
C'est en arrière. Quand un comportement est en place depuis 20 ans, bien ou mal, c'est comme ça et ça ne changera pas. Je pense que le pionnier était le lynx (il est plus ancien que le web); Je ne sais pas pourquoi il a utilisé des minuscules. Curl a commencé en majuscule puis est passé en minuscule pour être compatible avec lynx et wget .
Gilles 'SO- arrête d'être méchant'
0

WGET - utilise uniquement les paramètres de proxy minuscules!

MeneerBij
la source
-1

Les deux http_proxyet HTTP_PROXYdevraient travailler sur RHEL et les systèmes à base de ubuntu.

Karthik K
la source