Який "правильний" формат для змінної середовища HTTP_PROXY? Шапки чи кришки?


Відповіді:


27

Немає центрального органу, який би присвоював змінні середовища середовище офіційне значення, перш ніж програми можуть використовувати їх. POSIX визначає значення деяких змінних ( PATH, TERM, ...) і списки трохи більше в ненормативному, як бути в загальному користуванні, всі вони в верхньому регістрі. http_proxyі друзі - не один із них.

В відміну від звичайних в основному всіх змінних оточень , що використовуються багатьма додатками, http_proxy, https_proxy, ftp_proxyі , no_proxyяк правило , в нижньому регістрі. Я не пригадую жодної програми, яка розуміє їх лише у великих літерах, я навіть не можу знайти жодної програми, яка б спробувала їх у великих літерах. У багатьох програмах використовується лише рядковий варіант, включаючи lynx, wget, curl, perl LWP, perl WWW :: Search, python urllib / urllib2 і т. Д. Отже, для цих змінних правильна форма - це малий регістр.

Нижнє ім'я походить щонайменше з CERN libwww 2.15 у березні 1994 року (завдяки Стефану Шазеласу за те, що він знайшов це). Я не знаю, що мотивувало вибір нижнього регістру, який був би незвичним навіть тоді.


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-> Для запису, я тільки що дізнався , що Докер 17.04.0-с тільки відміну no_proxy.
jaume

сценарії хмарної інформації (cfn-сигнал, cfn-init) використовують верхній варіант HTTPS_PROXY. Докер також використовує верхній регістр.
Феліпе Альварес

під час спроби додати сховище ppa для мене нижній регістр не підійде. sudo -E apt-add-repository ppa:xxxxx/xxxx. я повинен був unset https_proxyіexport HTTPS_PROXY=http://a.b.c.d:xxxx
Mheni

7

Немає стандартних і великі та малі версії використовуються залежно від програми (також див. HTTPS_PROXY, ALL_PROXY, NO_PROXY).

Наприклад:

завиток

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

Пітон

urllib.request.getproxies() підтримує як малі, так і великі варіанти.

Він також згадує про питання безпеки:

Якщо встановлена ​​змінна середовище REQUEST_METHOD, яка зазвичай вказує на те, що ваш сценарій працює у середовищі CGI, змінна середовища HTTP_PROXY (верхній регістр _PROXY) буде ігноруватися. Це тому, що цю змінну клієнт може вводити за допомогою заголовка HTTP «Проксі:». Якщо вам потрібно використовувати проксі-сервер HTTP у середовищі CGI, або використовуйте ProxyHandler явно, або переконайтесь, що ім'я змінної в нижньому регістрі (або принаймні суфікс _proxy).


Деякі програми дозволяють NO_PROXYмістити зірки / ip-діапазони, а інші -.


Так

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

повинен був би вас прикрити.


0

Конвенція полягає в тому, щоб використовувати всі змінні середовища capps при їх експортуванні, так що під час написання скриптів оболонки ви можете використовувати імена змінних малих літер, не турбуючись про зіткнення імен з іншими програмами. Звичайно, це лише умова, не існує технічних обмежень щодо обмеження назв змінних оточуючого середовища, тому малу версію можна використовувати в деяких випадках, але найкраща практика - це великі регістри, і пам’ятайте, що вони відрізняються від регістру, щоб вони могли мати різні значення.


На відміну від більшості (в основному, всіх) звичайних змінних умов середовища, http_proxyі її братів і сестер зазвичай бувають малі.
Жиль "ТАК - перестань бути злим"

@Gilles, що буде помилкою.
hildred

3
Ні, це не так. Ви маєте рацію, що існує умова використовувати великі регістри для змінних оточуючих, але це лише умова, а не абсолютне правило. Стандарт фактичних змінних оточуючих середовищ http_proxyта друзів повинен бути написаний з малих літер, порушуючи конвенцію. Використання додатка HTTP_PROXYбуло б помилкою, оскільки воно було б несумісне з рештою світу.
Жил "ТАК - перестань бути злим"

1
snarf вимагає великих букв, і є повідомлення про помилку від wget.
hildred

1
Це відстале. Якщо поведінка існує 20 років, правильно чи неправильно, так воно і не зміниться. Я думаю, що піонером був рись (він старший за павутину); Я не знаю, чому вона використовувала малі літери. Curl починався з великої літери, а потім змінювався на малі регістри для сумісності з рисом та wget .
Жил "ТАК - перестань бути злим"


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.