Was ist das richtige Format für die Umgebungsvariable HTTP_PROXY? Caps oder keine Caps?

25

Ich bin beiden http_proxyund begegnet HTTP_PROXY. Sind beide Formen gleichwertig? Hat einer von ihnen Vorrang vor dem anderen?

Mihai
quelle

Antworten:

27

Es gibt keine zentrale Behörde, die Umgebungsvariablen eine offizielle Bedeutung zuweist, bevor Anwendungen sie verwenden können. POSIX definiert die Bedeutung einiger Variablen ( PATH, TERM, ...) und listet mehr mehr in einer nicht-normativen Art und Weise , wie im allgemeinen Gebrauch ist, alle von ihnen in Großbuchstaben geschrieben. http_proxyund Freunde ist keiner von ihnen.

Im Gegensatz zu allen herkömmlichen Umgebungsvariablen, die von vielen Anwendungen verwendet http_proxywerden https_proxy, ftp_proxyund no_proxywerden normalerweise in Kleinbuchstaben angegeben. Ich kann mich an kein Programm erinnern, das sie nur in Großbuchstaben versteht. Ich kann nicht einmal ein Programm finden, das sie in Großbuchstaben ausprobiert. Viele Programme verwenden nur die Kleinbuchstabenvariante, einschließlich Luchs, Wget, Curl, Perl LWP, Perl WWW :: Search, Python urllib / urllib2 usw. Für diese Variablen ist die richtige Form die Kleinbuchstabenvariante.

Der Name in Kleinbuchstaben stammt mindestens von CERN libwww 2.15 im März 1994 (danke an Stéphane Chazelas für die Lokalisierung). Ich weiß nicht, was die Wahl von Kleinbuchstaben motiviert hat, was schon damals ungewöhnlich gewesen wäre.

Gilles 'SO - hör auf böse zu sein'
quelle
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-> Ich habe gerade herausgefunden, dass Docker 17.04.0-ce nur NO_PROXY ehrt.
Jaume
Wolkenbildungsskripte (cfn-signal, cfn-init) verwenden die Großbuchstabenvariante HTTPS_PROXY. Docker verwendet auch die Großbuchstabenvariante.
Felipe Alvarez
Kleinbuchstaben würden bei mir nicht funktionieren, wenn ich versuche, ein ppa-Repository hinzuzufügen. sudo -E apt-add-repository ppa:xxxxx/xxxx. Ich musste unset https_proxyundexport HTTPS_PROXY=http://a.b.c.d:xxxx
Mheni
7

Es gibt keinen Standard und je nach Anwendung werden sowohl Groß- als auch Kleinbuchstaben verwendet (siehe auch HTTPS_PROXY, ALL_PROXY, NO_PROXY).

Beispielsweise:

locken

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() unterstützt sowohl Klein- als auch Großbuchstaben.

Es wird auch ein Sicherheitsproblem erwähnt:

Wenn die Umgebungsvariable REQUEST_METHOD festgelegt ist, was normalerweise darauf hinweist, dass Ihr Skript in einer CGI-Umgebung ausgeführt wird, wird die Umgebungsvariable HTTP_PROXY (_PROXY in Großbuchstaben) ignoriert. Dies liegt daran, dass diese Variable von einem Client mithilfe des HTTP-Headers "Proxy:" eingefügt werden kann. Wenn Sie einen HTTP-Proxy in einer CGI-Umgebung verwenden müssen, verwenden Sie entweder ProxyHandler explizit oder stellen Sie sicher, dass der Variablenname in Kleinbuchstaben angegeben ist (oder zumindest das Suffix _proxy).


Einige Anwendungen können NO_PROXYSterne / IP-Bereiche enthalten, andere nicht.


So

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

sollten Sie abgedeckt haben.

laktak
quelle
0

Die Konvention besteht darin, beim Exportieren alle capps-Umgebungsvariablen zu verwenden, sodass Sie beim Schreiben von Shell-Skripten Namen in Kleinbuchstaben verwenden können, ohne sich Gedanken über Namenskollisionen mit anderen Programmen machen zu müssen. Dies ist natürlich nur eine Konvention. Es gibt keine technische Einschränkung für die Beschränkung der Namen von Umgebungsvariablen, sodass in einigen Fällen die Kleinbuchstabenversion verwendet werden kann. Es wird jedoch empfohlen, die Groß- und Kleinschreibung zu beachten, sodass sie möglicherweise unterschiedlich sein können Werte.

hildred
quelle
Im Gegensatz zu den meisten (im Grunde genommen allen) konventionellen Umgebungsvariablen http_proxyund ihren Geschwistern handelt es sich normalerweise um Kleinbuchstaben.
Gilles 'SO - hör auf, böse
@ Gilles das wäre ein Bug.
Hildred
3
Nein, das ist es nicht. Sie haben Recht, dass es eine Konvention gibt, die Großbuchstaben für Umgebungsvariablen verwendet, aber es ist nur eine Konvention, keine absolute Regel. Der De-facto-Standard für Umgebungsvariablen http_proxyund Freunde ist entgegen einer Konvention in Kleinbuchstaben zu schreiben. Die Verwendung einer Anwendung HTTP_PROXYwäre ein Fehler, da sie mit dem Rest der Welt nicht kompatibel wäre.
Gilles 'SO- hör auf böse zu sein'
1
Snarf erfordert Großbuchstaben und es gibt einen Fehlerbericht gegen Wget.
Hildred
1
Das ist rückwärts. Wenn ein Verhalten seit 20 Jahren besteht, richtig oder falsch, ist es so und es wird nicht geändert. Ich denke, der Pionier war Luchs (es ist älter als das Web); Ich weiß nicht, warum Kleinbuchstaben verwendet wurden. Curl begann mit Großbuchstaben und wurde aus Gründen der Kompatibilität mit Luchs und Wget in Kleinbuchstaben geändert .
Gilles 'SO- hör auf böse zu sein'
0

WGET - verwendet nur die Proxy-Einstellungen in Kleinbuchstaben!

MeneerBij
quelle
-1

Beide http_proxyund HTTP_PROXYsollten auf RHEL- und Ubuntu-basierten Systemen funktionieren.

Karthik K
quelle