Jaki jest „właściwy” format dla zmiennej środowiskowej HTTP_PROXY? Czapki czy nie czapki?

25

Spotkałem oba http_proxyi HTTP_PROXY. Czy obie formy są równoważne? Czy jeden z nich ma pierwszeństwo przed drugim?

Mihai
źródło

Odpowiedzi:

27

Nie ma organu centralnego, który przypisywałby oficjalne znaczenie zmiennym środowiskowym, zanim aplikacje będą mogły ich użyć. POSIX definiuje znaczenie niektórych zmiennych ( PATH, TERM, ...) i kilka innych list w nienormatywnej sposób jako w powszechnym użyciu, wszystkie z nich wielkimi literami. http_proxyi przyjaciele nie są jednym z nich.

W przeciwieństwie do praktycznie wszystkich typowych zmiennych środowiskowych używanych przez wielu zastosowaniach http_proxy, https_proxy, ftp_proxyi no_proxysą zwykle małe. Nie przypominam sobie żadnego programu, który rozumie je tylko dużymi literami, nie mogę nawet znaleźć takiego, który wypróbuje je dużymi literami. Wiele programów używa tylko małych liter, w tym rysi, wget, curl, perl LWP, perl WWW :: Search, python urllib / urllib2 itd. Tak więc w przypadku tych zmiennych odpowiednia forma to mała litera.

Nazwa pisana małymi literami pochodzi przynajmniej od CERN libwww 2.15 w marcu 1994 r. (Podziękowania dla Stéphane'a Chazelasa za odnalezienie tego). Nie wiem, co uzasadniało wybór małych liter, co nawet wtedy byłoby niezwykłe.

Gilles „SO- przestań być zły”
źródło
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-> Dla przypomnienia, właśnie dowiedziałem się, że doker 17.04.0-ce honoruje tylko NO_PROXY.
jaume
skrypty formacji chmurowej (cfn-signal, cfn-init) używają wariantu wielkich liter HTTPS_PROXY. doker używa również wariantu wielkich liter.
Felipe Alvarez
małe litery nie działałyby dla mnie, gdy próbuję dodać repozytorium ppa. sudo -E apt-add-repository ppa:xxxxx/xxxx. musiałem unset https_proxyiexport HTTPS_PROXY=http://a.b.c.d:xxxx
Mheni
7

Nie ma standardu, w zależności od aplikacji używane są zarówno wielkie, jak i małe wersje (patrz także HTTPS_PROXY, ALL_PROXY, NO_PROXY).

Na przykład:

kędzior

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)). [..]

Pyton

urllib.request.getproxies() obsługuje zarówno małe, jak i wielkie litery.

Wspomina także o problemie bezpieczeństwa:

Jeśli ustawiona jest zmienna środowiskowa REQUEST_METHOD, co zwykle wskazuje, że skrypt działa w środowisku CGI, zmienna środowiskowa HTTP_PROXY (wielkie litery _PROXY) zostanie zignorowana. Jest tak, ponieważ klient może wprowadzić tę zmienną za pomocą nagłówka HTTP „Proxy:”. Jeśli potrzebujesz używać proxy HTTP w środowisku CGI, użyj jawnie ProxyHandler lub upewnij się, że nazwa zmiennej jest pisana małymi literami (lub przynajmniej sufiksem _proxy).


Niektóre aplikacje pozwalają NO_PROXYzawierać gwiazdki / zakresy ip, podczas gdy inne nie.


Więc

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

powinien cię objąć.

laktak
źródło
0

Konwencja polega na użyciu wszystkich zmiennych środowiskowych capps podczas ich eksportowania, dzięki czemu podczas pisania skryptów powłoki można używać nazw zmiennych pisanych małymi literami, nie martwiąc się o kolizje nazw z innymi programami. Oczywiście jest to tylko konwencja, nie ma technicznych ograniczeń w ograniczaniu nazw zmiennych środowiskowych, więc w niektórych przypadkach można używać wersji z małymi literami, ale najlepszą praktyką jest stosowanie wielkich liter i pamiętaj, że rozróżniają małe i duże litery, aby mogły mieć różne wartości.

Hildred
źródło
W przeciwieństwie do większości (w zasadzie wszystkich) konwencjonalnych zmiennych środowiskowych, http_proxya jego rodzeństwo jest zwykle pisane małymi literami.
Gilles „SO- przestań być zły”
@Gilles to byłby błąd.
hildred
3
Nie, nie jest. Masz rację, że istnieje konwencja używania wielkich liter w zmiennych środowiskowych, ale jest to tylko konwencja, a nie bezwzględna reguła. Faktyczny standard dla zmiennych środowiskowych http_proxyi przyjaciół ma być pisany małymi literami, z naruszeniem konwencji. Zastosowanie aplikacji HTTP_PROXYbyłoby błędem, ponieważ byłoby niezgodne z resztą świata.
Gilles „SO- przestań być zły”
1
snarf wymaga wielkich liter i jest raport o błędzie przeciwko wget.
hildred
1
To jest zacofane. Kiedy zachowanie istnieje od 20 lat, dobre czy złe, tak właśnie jest i nie będzie można tego zmienić. Myślę, że pionierem był ryś (jest starszy od sieci); Nie wiem, dlaczego używał małych liter. Zwijanie zaczynało się od wielkich liter, a następnie zmieniało się na małe, aby zapewnić zgodność z rysiami i wget .
Gilles „SO- przestań być zły”
0

WGET - używa tylko małych ustawień proxy!

MeneerBij
źródło
-1

Zarówno http_proxyi HTTP_PROXYpowinien działać na systemach RHEL i ubuntu oparty.

Karthik K.
źródło