ความเข้ากันได้ของ NO_PROXY ใน curl, .NET และคอนเทนเนอร์
เปลี่ยนนโยบายการกำหนดเส้นทางตรงที่ใช้ร่วมกันให้เป็นการกำหนดค่าที่เฉพาะเจาะจงกับไคลเอนต์ด้วยชุดปลายทางตัวแทนเล็ก ๆ
ทีมหนึ่งใส่สตริงข้ามหนึ่งรายการลงในไฟล์สภาพแวดล้อมที่ใช้ร่วมกัน curl เชื่อมต่อโดยตรง แอปพลิเคชันอื่นใช้พร็อกซี และคอนเทนเนอร์ก็ทำงานต่างออกไปอีก ไฟล์ที่ใช้ร่วมกันแจกจ่ายอักขระเดียวกัน แต่ไม่ได้แจกจ่ายตัวแยกวิเคราะห์ร่วมกันหนึ่งตัว
สิ่งถาวรคือนโยบาย: ปลายทางใดควรเชื่อมต่อโดยตรง ภายใต้เงื่อนไขใด แยกสิ่งนั้นออกจากสตริงที่แต่ละโปรแกรมต้องการ
เขียนเส้นทางที่คาดไว้ก่อน
ใช้ที่อยู่ตัวแทน รวมถึงกรณีขอบ ไม่ใช่แค่ความสำเร็จที่ง่าย:
| รูปร่างของปลายทาง | คำถามสำหรับเจ้าของนโยบาย |
|---|---|
| โดเมนหลัก | ควรข้ามหรือเฉพาะโดเมนลูก? |
| โดเมนย่อย | สืบทอดเส้นทางเดียวกันหรือไม่? |
| IP ส่วนตัวแบบตัวอักษร | ที่อยู่ดังกล่าวเข้าถึงได้โดยตรงจากไคลเอนต์นี้หรือไม่? |
| บริการเดียวกันภายใต้ชื่อโฮสต์ | คำขอตามชื่อและตามที่อยู่ควรตรงกันหรือไม่? |
| พอร์ตบริการอื่น | ข้อยกเว้นครอบคลุมโฮสต์หรือตัวรับฟังเดียว? |
จากนั้นระบุผู้บริโภค: เดมอนที่ดึงอิมเมจ โปรแกรมภายในคอนเทนเนอร์ ไลบรารี HTTP ของภาษา และเบราว์เซอร์แบบโต้ตอบล้วนเป็นรายการแยกกันได้ การกำหนดค่าพร็อกซีของไคลเอนต์ Docker สามารถเติมค่าสภาพแวดล้อมของคอนเทนเนอร์ได้โดยไม่ต้องให้ไคลเอนต์ทุกตัวภายในใช้กฎการจับคู่เดียวกัน
แปลแทนการคัดลอกอย่างไม่ลืมหูลืมตา
ตัวอย่างที่บันทึกไว้ตัวอย่างหนึ่งของความแตกต่างจริงคือขอบเขตโดเมนหลัก การยกเว้นโดเมนของ curl ครอบคลุมโดเมนที่ระบุชื่อและโดเมนลูกที่ตรงกัน นโยบายสภาพแวดล้อมของ .NET แยกชื่อเปล่าออกจากรูปแบบโดเมนย่อยที่มีจุดนำหน้า กฎสากลที่ว่า „เติมจุดนำหน้าเสมอ“ ไม่สามารถแสดงนโยบายทั้งสองได้อย่างน่าเชื่อถือ
การรองรับช่วง IP ก็ขึ้นอยู่กับผู้บริโภคและเวอร์ชันของมัน เครื่องที่มี curl แบบสแตนด์อโลนใหม่ยังคงเรียกใช้แอปพลิเคชันที่เชื่อมโยงกับ libcurl เก่า หรือไคลเอนต์ที่ใช้ไลบรารีอื่นทั้งหมดได้ รุ่นของระบบปฏิบัติการไม่ใช่บัญชีไคลเอนต์ที่สมบูรณ์
สำหรับผู้บริโภคแต่ละราย บันทึกอินเทอร์เฟซการกำหนดค่าที่รองรับและนิพจน์ที่เล็กที่สุดของเส้นทางที่ตั้งใจไว้ รายการโฮสต์สั้น ๆ ที่ชัดเจนอาจดีกว่ารูปแบบฉลาดที่ไม่มีใครอธิบายความหมายได้
แยกหลักฐานการกำหนดค่าออกจากหลักฐานการเชื่อมต่อ
การตั้งค่าที่แยกวิเคราะห์แล้วหรือ API การตัดสินเส้นทางสามารถแสดงสิ่งที่โปรแกรมเลือก ผลลัพธ์ของคำขอจะแสดงว่าเส้นทางนั้นใช้งานได้หรือไม่ ใน .NET HttpClient.DefaultProxy.IsBypassed ให้การตรวจสอบฝั่งการกำหนดค่านั้นเมื่อพร็อกซีเริ่มต้นเป็นนโยบายที่ใช้อยู่ อย่าวินิจฉัยบริการโดยตรงที่เข้าถึงไม่ได้ว่าเป็นความล้มเหลวของตัวแยกวิเคราะห์การข้ามเพียงเพราะคำขอหมดเวลา
เก็บปลายทางขอบเขตไว้เมื่ออัปเดตไคลเอนต์หรืออิมเมจฐาน สิ่งเหล่านี้ทำให้การเปลี่ยนแปลงความเข้ากันได้ในอนาคตมองเห็นได้โดยไม่ต้องให้ทั้งทีมค้นพบใหม่ว่าเหตุใดไฟล์จึงมีรายการโดเมนที่ดูคล้ายกันสองรายการ