Go কেন localhost-এর জন্য প্রক্সি এড়িয়ে যায়
Go-এর অন্তর্নির্মিত লুপব্যাক ব্যতিক্রমকে NO_PROXY থেকে আলাদা করুন এবং পরিবেশভিত্তিক রাউটিংয়ের সঙ্গে স্পষ্ট ProxyURL-এর তুলনা করুন।
Go-এর পরিবেশভিত্তিক প্রক্সি নির্বাচকে localhost ও লুপব্যাক IP গন্তব্যের জন্য অন্তর্নির্মিত ব্যতিক্রম আছে। NO_PROXY খালি করলে সেই ব্যতিক্রম দূর হয় না। ফলে স্থানীয় পরীক্ষা সরাসরি যুক্ত হতে পারে, অথচ সর্বজনীন হোস্টনামে পাঠানো অনুরোধ প্রত্যাশামতো প্রক্সি ব্যবহার করে।
নিয়মটি অনুরোধের গন্তব্য নিয়ে। এটি এমন প্রক্সি লিসেনার ব্যবহার করতে বাধা দেয় না যার নিজের ঠিকানা 127.0.0.1।
অনুরোধ না পাঠিয়ে নির্বাচক পরীক্ষা করুন
package main
import (
"fmt"
"net/http"
"net/url"
)
func main() {
fixed, _ := url.Parse("http://203.0.113.10:8080")
for _, target := range []string{
"http://localhost:8000/",
"http://127.0.0.1:8000/",
"http://example.com/",
} {
request, _ := http.NewRequest("GET", target, nil)
discovered, err := http.ProxyFromEnvironment(request)
explicit, _ := http.ProxyURL(fixed)(request)
fmt.Println(target, discovered, explicit, err)
}
}
পরিবেশের সঙ্গে তুলনা দেখতে চাইলে প্রক্রিয়ার জন্য প্রক্সি ভেরিয়েবল সেট করে প্রোগ্রাম চালান। প্রোগ্রাম শুধু নির্বাচকগুলোর ফল নির্ণয় করে; এটি নথির উদাহরণের প্রক্সি বা কোনো গন্তব্যেই যুক্ত হয় না।
পরিবেশ থেকে শনাক্তকরণ ও স্পষ্ট নির্বাচক আলাদা নীতি
ProxyFromEnvironment গন্তব্যের স্কিম, পরিবেশের সেটিং ও প্রক্সি এড়ানোর নিয়ম বিবেচনা করে, যার মধ্যে লুপব্যাকের বিশেষ ব্যবস্থাও রয়েছে। ProxyURL ওই নির্বাচকে দেওয়া প্রতিটি অনুরোধের জন্য সরবরাহ করা প্রক্সি URL ফেরত দেয়।
তাই স্পষ্ট ProxyURL-সহ আলাদা ট্রান্সপোর্ট স্থানীয় গন্তব্যের অনুরোধও প্রক্সির মাধ্যমে পাঠাতে পারে। এটি তখনই কাজে লাগে যখন প্রক্সি বৈধভাবে অনুরোধ করা গন্তব্যে পৌঁছাতে পারে। দূরবর্তী প্রক্সির localhost আপনার ল্যাপটপের localhost নয়, তাই জোর করে পথ নির্ধারণ করলেই সেটি উপযোগী সংযোগ পরীক্ষা হয়ে যায় না।
প্রক্রিয়া পরিবেশ ক্যাশ করার আগে পরীক্ষা করুন
স্ট্যান্ডার্ড net/http-এর পরিবেশভিত্তিক প্রক্সি কনফিগারেশন প্রথম ব্যবহারের পর ক্যাশ হয়। পরে একই চলমান প্রোগ্রামের মধ্যে পরিবেশের ভেরিয়েবল বদলানো নতুন কনফিগারেশনের পরীক্ষা আবার করার নির্ভরযোগ্য উপায় নয়। কাঙ্ক্ষিত মান দিয়ে নতুন প্রক্রিয়া শুরু করুন, অথবা এমন স্পষ্ট নির্বাচক দিন যার আচরণ আপনি নিয়ন্ত্রণ করেন।
এই লুপব্যাক আচরণ Go 1.27.3-এর স্ট্যান্ডার্ড প্রক্সি নির্বাচকের ক্ষেত্রে প্রযোজ্য। অন্য ভাষা ও HTTP ক্লায়েন্ট localhost-এর জন্য আলাদা রাউটিং নিয়ম ব্যবহার করতে পারে।