HTTP_PROXY 환경 변수에 대한 '올바른'형식은 무엇입니까? 모자 또는 모자 없음?


25

나는 모두가 발생했습니다 http_proxyHTTP_PROXY. 두 형태가 동일합니까? 그들 중 하나가 다른 것보다 우선합니까?

답변:


27

어플리케이션이 사용하기 전에 환경 변수에 공식적인 의미를 부여하는 중앙 권한은 없습니다. POSIX 는 일부 변수 ( PATH,, TERM…) 의 의미를 정의하고 , 일반적으로 사용되는 것으로 비정규적인 방식으로 여러 변수를 모두 대문자로 나열합니다. http_proxy친구는 그들 중 하나가 아닙니다.

많은 응용 프로그램에서 사용 기본적으로 모든 기존 환경 변수와는 달리, http_proxy, https_proxy, ftp_proxyno_proxy일반적으로 소문자된다. 대문자로만 이해하는 프로그램은 기억 나지 않으며 대문자로 시도하는 프로그램조차 찾을 수 없습니다. 많은 프로그램은 lynx, wget, curl, perl LWP, perl WWW :: Search, python urllib / urllib2 등을 포함하여 소문자 변형 만 사용합니다. 따라서 이러한 변수의 경우 올바른 형식은 소문자입니다.

소문자 이름은 적어도 1994 년 3 월 CERN libwww 2.15 로 거슬러 올라갑니다 . 나는 소문자 선택에 동기가 무엇인지 알지 못했습니다.


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-> 기록을 위해 방금 docker 17.04.0-ce가 NO_PROXY 만을 존중 한다는 것을 알았습니다 .
jaume

cloudformation 스크립트 (cfn-signal, cfn-init)는 대문자 변형을 사용합니다 HTTPS_PROXY. docker는 대문자 변형도 사용합니다.
Felipe Alvarez 5

ppa 저장소를 추가하려고 할 때 소문자가 작동하지 않습니다. sudo -E apt-add-repository ppa:xxxxx/xxxx. 나는에 가지고 unset https_proxyexport 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

자식

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() 소문자와 대문자 변형을 모두 지원합니다.

또한 보안 문제에 대해서도 언급합니다.

스크립트가 CGI 환경에서 실행 중임을 나타내는 환경 변수 REQUEST_METHOD가 설정되면 환경 변수 HTTP_PROXY (대문자 _PROXY)가 무시됩니다. 이는 클라이언트가 "Proxy :"HTTP 헤더를 사용하여 해당 변수를 주입 할 수 있기 때문입니다. CGI 환경에서 HTTP 프록시를 사용해야하는 경우 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 'SO- 악의를 멈춰라'

@ 질은 버그 일 것입니다.
hildred

3
아닙니다. 환경 변수에 대문자를 사용하는 규칙이 있지만 그것은 절대 규칙이 아니라 규칙 일뿐입니다. 환경 변수 http_proxy및 친구에 대한 사실상의 표준 은 규칙을 위반하여 소문자로 표기해야합니다. 응용 프로그램의 HTTP_PROXY경우 다른 국가와 호환되지 않기 때문에 버그 일 것입니다.
Gilles 'SO- 악마 그만해'

1
snarf에는 대문자가 필요하며 wget에 대한 버그 보고서가 있습니다.
0:06에

1
거꾸로입니다. 20 년 동안 옳고 그른 행동이 있었을 때, 그것이 그런 방식으로 바뀌지 않을 것입니다. 개척자가 살이 (웹보다 나이가 많다) 고 생각합니다. 왜 소문자를 사용했는지 모르겠습니다. 컬은 대문자로 시작한 다음 lynx 및 wget과의 호환성을 위해 소문자로 변경되었습니다 .
Gilles 'SO- 악마 그만'


-1

모두 http_proxyHTTP_PROXYRHEL 및 우분투 기반 시스템에서 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.