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


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.


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ąć.


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.


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”


-1

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.