Apakah HTTP_PROXY, HTTPS_PROXY dan NO_PROXY variabel lingkungan standar?

12

Tampaknya banyak program dirancang untuk membaca variabel lingkungan ini untuk memutuskan proxy apa yang harus dilalui untuk terhubung ke sumber daya di internet. Program-program itu mungkin juga memiliki pengaturan proxy masing-masing, tetapi jika tidak disetel, mereka akan dengan senang hati menggunakan variabel lingkungan ini ...

  • HTTP_PROXY
  • HTTPS_PROXY
  • NO_PROXY

Saya hanya ingin tahu:

  • Apakah variabel lingkungan ini standar?
  • Apakah ada spesifikasi tertulis (mungkin oleh produsen OS?) Itu merekomendasikan penggunaan variabel lingkungan ini?
Niko Bellic
sumber
1
Saya tidak tahu no_proxy, tetapi http_proxy (huruf kecil tertulis) adalah standar
Uwe Burger
@UweBurger mungkin Anda dapat menyatakan program mana yang menggunakannya .. Dan itu berlaku untuk si penanya juga. Saya pernah melihatnya digunakan di wget
barlop

Jawaban:

7

Ini lebih merupakan konvensi daripada standar. Kemungkinan didukung oleh satu atau lebih pustaka protokol penangan yang benar-benar membuat koneksi. Java menggunakan properti serupa di pustaka protokolnya.

Memahami dan menggunakan konvensi umum membuat pembangunan lebih sederhana. Ini juga membantu menerapkan prinsip kejutan paling tidak dan membuat program lebih mungkin just work.

BillThor
sumber
5

Saya setuju dengan pernyataan BillThor itu Ini lebih merupakan konvensi daripada standar.
Saya tidak tahu asal dari variabel-variabel ini tetapi dalam hal HTTP pada * nix banyak konvensi berasal dari perilaku libcurl Pustaka HTTP dan program baris perintah ikal.

Di https://curl.haxx.se/docs/manual.html ada deskripsi variabel lingkungan yang terkait dengan menggunakan proxy HTTP yang dipahami libcurl / curl:

VARIABEL LINGKUNGAN

Curl membaca dan memahami variabel lingkungan berikut:
http_proxy, HTTPS_PROXY, FTP_PROXY

Mereka harus ditetapkan untuk proxy protokol khusus. Proxy umum harus ditetapkan dengan
ALL_PROXY

Daftar nama host yang dipisahkan koma yang tidak boleh melalui proxy disetel (hanya tanda bintang, '*' cocok dengan semua host)
NO_PROXY

Jika nama host cocok dengan salah satu string ini, atau host berada dalam domain salah satu string ini, transaksi dengan simpul itu   tidak akan diproksi.

Mohon perhatikan itu http_proxy dieja huruf kecil sebagai satu-satunya di antara variabel-variabel ini. Beberapa perpustakaan / program mencari nama huruf kecil dari variabel-variabel ini sedangkan yang lain mencari nama huruf besar. Menjadi aman kita harus mendefinisikan versi huruf kecil dan besar masing-masing variabel.

Masalah lain adalah deskripsi yang dikutip tentang bagaimana nama host cocok NO_PROXY tidak tepat dan tidak menjawab pertanyaan berikut:

  • Nilai seharusnya nama domain yang sepenuhnya memenuhi syarat (FQDN) dengan demikian diakhiri dengan titik seperti foo.example.com. atau tidak?
  • Harus foo.example.com cocokkan hanya satu domain ini atau haruskah itu juga cocok dengan subdomain seperti apa bar.foo.example.com? Jika yang terakhir maka harus juga cocok dengan subdomain di subdomain seperti bar.baz.foo.example.com?
  • Aku s .foo.example.com (titik di awal) diizinkan dan jika demikian maka apa yang cocok?
  • Apakah asterisk ( * ) diizinkan sebagai bagian dari nilai ( *.example.com, *example.com ) dan jika demikian, bagaimana cara merawatnya?

Kurangnya spesifikasi formal menyebabkan kebingungan dan bug. Di sini kita harus menyebutkan Proxy lib perpustakaan yang bertujuan untuk memberikan dukungan yang benar dan konsisten untuk konfigurasi proxy. Dari rumah proyek halaman :

libproxy ada untuk menjawab pertanyaan: Diberikan sumber daya jaringan, bagaimana caranya   Saya mencapainya? Ini menangani semua detail, memungkinkan Anda untuk kembali   pemrograman.

Bacaan lebih lanjut:

Piotr Dobrogost
sumber
Apa yang dikatakan libproxy tentang pertanyaan yang Anda ajukan? Yang saya tertarik: "Haruskah .foo.example.com cocok dengan foo.example.com atau tidak?"
Robin Winslow
Saya tidak punya ide. Saya mendorong Anda untuk bertanya di github.com/libproxy/libproxy/issues
Piotr Dobrogost