HTTP_PROXY, HTTPS_PROXY และ NO_PROXY เป็นตัวแปรมาตรฐานของสภาพแวดล้อมหรือไม่?


25

ดูเหมือนว่าโปรแกรมจำนวนมากได้รับการออกแบบมาเพื่ออ่านตัวแปรสภาพแวดล้อมเหล่านี้เพื่อตัดสินใจว่าจะต้องใช้พร็อกซีใดเพื่อเชื่อมต่อกับทรัพยากรบนอินเทอร์เน็ต โปรแกรมเหล่านั้นอาจมีการตั้งค่าพร็อกซีแยกต่างหาก แต่หากไม่ได้ตั้งค่าพร็อกซีพวกเขาจะใช้ตัวแปรสภาพแวดล้อมเหล่านี้อย่างมีความสุข ...

  • http_proxy
  • https_proxy
  • no_proxy

ฉันแค่อยากจะรู้:

  • ตัวแปรสภาพแวดล้อมเหล่านี้เป็นมาตรฐานหรือไม่
  • มีสเปคเป็นลายลักษณ์อักษร (อาจเป็นของผู้ผลิตระบบปฏิบัติการหรือไม่) ที่แนะนำให้ใช้ตัวแปรสภาพแวดล้อมเหล่านี้?

1
ฉันไม่ทราบว่า no_proxy แต่ http_proxy (ตัวพิมพ์เล็ก) เป็นมาตรฐาน
Uwe Burger

@UweBurger คุณอาจระบุว่าโปรแกรมใดใช้งานได้บ้าง .. และนั่นก็เป็นปัญหาสำหรับผู้ถามด้วย ฉันเคยเห็นว่ามันใช้กับ wget
barlop

คำตอบ:


18

ฉันเห็นด้วยกับคำชี้แจงของ BillThor ว่านี่เป็นแบบแผนมากกว่ามาตรฐาน
ฉันไม่ทราบที่มาของตัวแปรเหล่านี้ แต่ในกรณีของ HTTP บน * ข้อตกลงจำนวนมากดูเหมือนว่าเกิดจากพฤติกรรมของไลบรารีlibcurl HTTP และโปรแกรมบรรทัดคำสั่ง curl

ที่https://curl.haxx.se/docs/manual.htmlมีคำอธิบายเกี่ยวกับตัวแปรสภาพแวดล้อมที่เกี่ยวข้องกับการใช้ HTTP พร็อกซีซึ่ง libcurl / curl เข้าใจ:

ตัวแปรด้านสิ่งแวดล้อม

Curl อ่านและทำความเข้าใจกับตัวแปรสภาพแวดล้อมดังต่อไปนี้:
http_proxy, HTTPS_PROXY, FTP_PROXY

พวกเขาควรจะตั้งค่าสำหรับผู้รับมอบฉันทะเฉพาะโปรโตคอล ควรตั้งค่าพร็อกซีทั่วไปด้วย
ALL_PROXY

รายการชื่อโฮสต์ที่คั่นด้วยเครื่องหมายจุลภาคที่ไม่ควรผ่านพร็อกซีใด ๆ จะถูกตั้งค่าใน (เฉพาะเครื่องหมายดอกจัน, '*' ตรงกับโฮสต์ทั้งหมด)
NO_PROXY

หากชื่อโฮสต์ตรงกับหนึ่งในสตริงเหล่านี้หรือโฮสต์อยู่ภายในโดเมนของหนึ่งในสตริงเหล่านี้การทำธุรกรรมกับโหนดนั้นจะไม่ถูกพร็อกซี

โปรดสังเกตว่าhttp_proxyตัวสะกดเล็กเป็นตัวเดียวในตัวแปรเหล่านี้ บางไลบรารี / โปรแกรมค้นหาชื่อตัวพิมพ์เล็กของตัวแปรเหล่านี้ในขณะที่บางโปรแกรมค้นหาชื่อตัวพิมพ์ใหญ่ เพื่อความปลอดภัยควรกำหนดทั้งตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ของแต่ละตัวแปร

ปัญหาอื่นก็คือคำอธิบายที่อ้างถึงว่าชื่อโฮสต์ถูกจับคู่กันอย่างไรNO_PROXYไม่แม่นยำและไม่ตอบคำถามต่อไปนี้:

  • ค่าควรเป็นชื่อโดเมนแบบเต็ม (FQDN)ซึ่งลงท้ายด้วยจุดเช่นนั้นfoo.example.com.หรือไม่?
  • ควรfoo.example.comตรงกับเพียงแค่นี้หนึ่งโดเมนหรือควรก็ยังตรงกับโดเมนย่อยใด ๆ เช่นbar.foo.example.com? ถ้าหลังควรแล้วก็ยังตรงกับโดเมนย่อยใด ๆ ในโดเมนย่อยใด ๆ เช่นbar.baz.foo.example.com?
  • เป็น.foo.example.com(จุดที่จุดเริ่มต้น) และถ้าเป็นเช่นนั้นแล้วสิ่งที่ควรจะตรงกับ?
  • เครื่องหมายดอกจัน ( *) ได้รับอนุญาตเป็นส่วนหนึ่งของค่า ( *.example.com, *example.com) และถ้าเป็นเช่นนั้นจะได้รับการปฏิบัติอย่างไร?

การขาดข้อกำหนดอย่างเป็นทางการนำไปสู่ความสับสนและข้อบกพร่อง ที่นี่มีการพูดถึงไลบรารีlibproxyซึ่งมีจุดมุ่งหมายเพื่อให้การสนับสนุนที่ถูกต้องและสอดคล้องสำหรับการกำหนดค่าพร็อกซี จากหน้าแรกของโครงการ:

libproxy มีอยู่เพื่อตอบคำถาม: เนื่องจากมีทรัพยากรเครือข่ายฉันจะเข้าถึงได้อย่างไร มันจัดการรายละเอียดทั้งหมดช่วยให้คุณสามารถกลับไปที่การเขียนโปรแกรม

อ่านเพิ่มเติม:


libproxy ต้องพูดอะไรเกี่ยวกับคำถามที่คุณถาม สิ่งที่ฉันสนใจ: "ควร. foo.example.com จับคู่ foo.example.com หรือไม่"
Robin Winslow

ฉันไม่รู้. ฉันแนะนำให้คุณถามที่github.com/libproxy/libproxy/issues
Piotr Dobrogost

13

นี่เป็นแบบแผนมากกว่ามาตรฐาน มันอาจได้รับการสนับสนุนจากไลบรารีตัวจัดการโพรโทคอลหนึ่งไลบรารีหรือมากกว่า Java ใช้คุณสมบัติที่คล้ายกันในไลบรารีโปรโตคอล

การทำความเข้าใจและการใช้การประชุมทั่วไปทำให้การพัฒนาง่ายขึ้นมาก just workนอกจากนี้ยังจะช่วยให้ใช้หลักการของน้อยประหลาดใจและทำให้โปรแกรมมีแนวโน้มที่จะ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.