Định dạng 'đúng' cho biến môi trường HTTP_PROXY là gì? Mũ hay không mũ?


25

Tôi đã gặp cả hai http_proxyHTTP_PROXY. Cả hai hình thức là tương đương? Có một trong số họ được ưu tiên hơn người khác?

Câu trả lời:


27

Không có cơ quan trung ương nào gán ý nghĩa chính thức cho các biến môi trường trước khi các ứng dụng có thể sử dụng chúng. POSIX định nghĩa ý nghĩa của một số biến số ( PATH,, TERM) và liệt kê một số biến khác theo cách không quy tắc như đang được sử dụng phổ biến, tất cả chúng đều được viết hoa. http_proxyvà bạn bè không phải là một trong số họ.

Không giống như về cơ bản tất cả các biến môi trường truyền thống được sử dụng bởi nhiều ứng dụng, http_proxy, https_proxy, ftp_proxyno_proxyđược thành chữ thường thường. Tôi không nhớ bất kỳ chương trình nào chỉ hiểu chúng bằng chữ hoa, tôi thậm chí không thể tìm thấy chương trình nào thử chúng bằng chữ hoa. Nhiều chương trình chỉ sử dụng biến thể chữ thường, bao gồm lynx, wget, curl, perl LWP, perl WWW :: Search, python urllib / urllib2, v.v. Vì vậy, đối với các biến này, dạng bên phải là dạng chữ thường.

Tên chữ thường bắt nguồn từ ít nhất là Cern libwww 2.15 vào tháng 3 năm 1994 (cảm ơn Stéphane Chazelas vì đã xác định vị trí này). Tôi không biết điều gì thúc đẩy sự lựa chọn chữ thường, điều mà sẽ không bình thường ngay cả khi đó.


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-> Đối với hồ sơ, tôi chỉ phát hiện ra rằng docker 17.04.0-ce chỉ vinh danh NO_PROXY.
jaume

tập lệnh đám mây (cfn-signal, cfn-init) sử dụng biến thể chữ hoa HTTPS_PROXY. docker cũng sử dụng biến thể chữ hoa.
Felipe Alvarez

trường hợp thấp hơn sẽ không làm việc cho tôi, khi cố gắng thêm một kho lưu trữ ppa. sudo -E apt-add-repository ppa:xxxxx/xxxx. tôi đã phải unset https_proxyexport HTTPS_PROXY=http://a.b.c.d:xxxx
Mheni

7

Không có tiêu chuẩn và cả phiên bản chữ hoa và chữ thường được sử dụng tùy thuộc vào ứng dụng (cũng xem HTTPS_PROXY, ALL_PROXY, NO_PROXY).

Ví dụ:

cuộn tròn

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

Con trăn

urllib.request.getproxies() hỗ trợ cả biến thể chữ thường và chữ hoa

Nó cũng đề cập đến một vấn đề bảo mật:

Nếu biến môi trường REQUEST_METHOD được đặt, thường cho biết tập lệnh của bạn đang chạy trong môi trường CGI, biến môi trường HTTP_PROXY (chữ hoa _PROXY) sẽ bị bỏ qua. Điều này là do biến đó có thể được chèn bởi một khách hàng bằng cách sử dụng tiêu đề HTTP Proxy:. Nếu bạn cần sử dụng proxy HTTP trong môi trường CGI, hãy sử dụng ProxyHandler một cách rõ ràng hoặc đảm bảo tên biến được viết thường (hoặc ít nhất là hậu tố _proxy).


Một số ứng dụng cho phép NO_PROXYchứa các ngôi sao / phạm vi ip trong khi những ứng dụng khác thì không.


Vì thế

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

nên có bạn bảo hiểm


0

Quy ước là sử dụng tất cả các biến môi trường capps khi xuất chúng, để khi bạn viết script shell, bạn có thể sử dụng tên biến chữ thường mà không phải lo lắng về xung đột tên với các chương trình khác. Tất nhiên đây chỉ là quy ước, không có giới hạn kỹ thuật nào trong việc giới hạn tên của các biến môi trường để phiên bản chữ thường có thể được sử dụng trong một số trường hợp, nhưng thực tế tốt nhất là chữ hoa và hãy nhớ rằng chúng phân biệt chữ hoa chữ thường để chúng có thể khác nhau các giá trị.


Không giống như hầu hết (về cơ bản, tất cả) các biến môi trường thông thường http_proxyvà anh chị em của nó thường là chữ thường.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles đó sẽ là một lỗi.
hildred

3
Không, không phải vậy. Bạn đúng rằng có một quy ước sử dụng chữ hoa cho các biến môi trường, nhưng đó chỉ là quy ước, không phải là quy tắc tuyệt đối. Tiêu chuẩn thực tế cho các biến môi trường http_proxyvà bạn bè sẽ được đánh vần bằng chữ thường, vi phạm quy ước. Đối với một ứng dụng để sử dụng HTTP_PROXYsẽ là một lỗi vì nó sẽ không tương thích với phần còn lại của thế giới.
Gilles 'SO- ngừng trở nên xấu xa'

1
snarf yêu cầu chữ hoa và có một báo cáo lỗi chống lại wget.
hildred

1
Đó là lạc hậu. Khi một hành vi đã tồn tại được 20 năm, đúng hay sai, đó là cách nó được thực hiện và nó sẽ không bị thay đổi. Tôi nghĩ rằng người tiên phong là lynx (nó cũ hơn web); Tôi không biết tại sao nó lại dùng chữ thường. Curl bắt đầu là chữ hoa sau đó đổi thành chữ thường để tương thích với lynx và wget .
Gilles 'SO- ngừng trở nên xấu xa'


-1

Cả hai http_proxyHTTP_PROXYnên hoạt động trên các hệ thống dựa trên RHEL và ubfox.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.