Какой правильный формат для переменной среды HTTP_PROXY? Крышки или нет?


25

Я столкнулся с обоими http_proxyи 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-ce только чтит NO_PROXY.
Jaume

В сценариях облачной информации (cfn-signal, 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
Мени

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

мерзавец

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-заголовка «Proxy:». Если вам нужно использовать 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и его братья и сестры обычно строчные.
Жиль "ТАК - перестань быть злым"

@ Жиль, это было бы ошибкой.
hildred

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

1
snarf требует прописных букв и есть сообщение об ошибке в wget.
Хильдред

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


-1

И то, http_proxyи другое HTTP_PROXYдолжно работать на системах на основе RHEL и Ubuntu.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.