HTTP/2 Go-র SOCKS টানেলের ভেতরে কাজ করে
স্ট্যান্ডার্ড HTTP ট্রান্সপোর্ট ক্লোন করুন, SOCKS প্রক্সি নির্বাচন করুন এবং প্রকৃতপক্ষে সমঝোতা হওয়া গন্তব্য প্রোটোকল পরীক্ষা করুন।
একটি SOCKS টানেল একটি TCP সংযোগ বহন করে। Go সেই টানেলের মাধ্যমে গন্তব্যের সঙ্গে TLS করতে পারে এবং সেখানে HTTP/2 সমঝোতা করতে পারে; SOCKS সার্ভারকে নিজে HTTP/2 বলতে হয় না।
Go-র স্ট্যান্ডার্ড ডিফল্ট ট্রান্সপোর্ট ধরে রাখা একটি প্রোগ্রামে তার কনফিগারেশন ক্লোন করুন এবং প্রক্সি নির্বাচন করুন:
import (
"net/http"
"net/url"
"time"
)
proxyURL := &url.URL{
Scheme: "socks5",
Host: "proxy.example:1080",
}
transport := http.DefaultTransport.(*http.Transport).Clone()
transport.Proxy = http.ProxyURL(proxyURL)
client := &http.Client{
Transport: transport,
Timeout: 30 * time.Second,
}
প্রক্সি ও গন্তব্য আলাদা মান হিসেবে থাকে। প্রক্সির মানের জন্য SOCKS5 প্রক্সি তালিকা থেকে একটি SOCKS5 এন্ডপয়েন্ট নির্বাচন করুন; HTTP/2 এখনও গন্তব্যের সঙ্গে সমঝোতা করা হয়। প্রকৃত HTTPS পরিষেবা URL অনুরোধ করতে client ব্যবহার করুন, তারপর অ্যাপ্লিকেশনের স্বাভাবিক জীবনচক্রের মাধ্যমে রেসপন্স বডি বন্ধ করুন।
স্ট্যান্ডার্ড ডিফল্ট ট্রান্সপোর্ট HTTP/2 সমর্থন করে। এটি ক্লোন করলে সেই কনফিগারেশন থাকে এবং প্রক্সি নির্বাচন পরিবর্তন করা যায়। টাইপ অ্যাসারশন ধরে নেয় যে প্রোগ্রামটি http.DefaultTransport-কে অন্য RoundTripper দিয়ে প্রতিস্থাপন করেনি।
আলাদাভাবে তৈরি ট্রান্সপোর্টের ক্ষেত্রে এর HTTP/2 কনফিগারেশন পর্যালোচনা করুন, বিশেষত কাস্টম dial বা TLS হুক সরবরাহ করার সময়। Go ForceAttemptHTTP2 এবং নতুন সংস্করণে সেই নির্বাচনগুলির জন্য স্পষ্ট Protocols কনফিগারেশন প্রকাশ করে।
গন্তব্যকে এখনও TLS সমঝোতার মাধ্যমে HTTP/2 সরবরাহ করতে হবে। কী ব্যবহার হয়েছে তা দেখতে সফল রেসপন্সের Proto বা ProtoMajor মান পরীক্ষা করুন। SOCKS-এর মাধ্যমে সফল HTTPS অনুরোধ নিজে থেকে প্রমাণ করে না যে সমঝোতা হওয়া প্রোটোকল HTTP/2 ছিল।