ហេតុអ្វី Go រំលងប្រូកស៊ីសម្រាប់ localhost
បែងចែកករណីលើកលែង loopback ដែលមានស្រាប់ក្នុង Go ពី NO_PROXY និងប្រៀបធៀបការកំណត់ផ្លូវតាមបរិស្ថានជាមួយ ProxyURL ដែលបញ្ជាក់ច្បាស់។
ឧបករណ៍ជ្រើសប្រូកស៊ីតាមបរិស្ថានរបស់ Go មានករណីលើកលែងស្រាប់សម្រាប់ localhost និងគោលដៅ IP loopback។ ការលុបតម្លៃ 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 ពិចារណាស្គីមគោលដៅ ការកំណត់បរិស្ថាន និងច្បាប់រំលង រួមទាំងការដោះស្រាយ loopback ពិសេសរបស់វា។ ProxyURL ត្រឡប់ URL ប្រូកស៊ីដែលបានផ្តល់ សម្រាប់សំណើនីមួយៗដែលបញ្ជូនទៅឧបករណ៍ជ្រើសនោះ។
ដូច្នេះ transport ដាច់ដោយឡែកដែលមាន ProxyURL បញ្ជាក់ច្បាស់ អាចផ្ញើសំណើទៅគោលដៅក្នុងម៉ាស៊ីនតាមប្រូកស៊ី។ វាមានប្រយោជន៍តែនៅពេលប្រូកស៊ីអាចទៅដល់គោលដៅដែលស្នើសុំបានដោយស្របច្បាប់។ localhost របស់ប្រូកស៊ីពីចម្ងាយមិនមែនជា localhost របស់កុំព្យូទ័រយួរដៃអ្នកទេ ដូច្នេះការបង្ខំផ្លូវមិនមែនជាការសាកល្បងការតភ្ជាប់ដែលមានប្រយោជន៍ដោយស្វ័យប្រវត្តិឡើយ។
ពិនិត្យមុនពេលដំណើរការរក្សាបរិស្ថានក្នុងឃ្លាំងសម្ងាត់
ការកំណត់ប្រូកស៊ីតាមបរិស្ថានរបស់ net/http ស្តង់ដារត្រូវបានរក្សាក្នុងឃ្លាំងសម្ងាត់ក្រោយការប្រើលើកដំបូង។ ការប្តូរអថេរបរិស្ថានពេលក្រោយក្នុងកម្មវិធីដដែលដែលកំពុងដំណើរការ មិនមែនជាវិធីដែលអាចទុកចិត្តបានដើម្បីធ្វើតេស្តការកំណត់ថ្មីម្តងទៀតទេ។ ចាប់ផ្តើមដំណើរការថ្មីជាមួយតម្លៃដែលចង់បាន ឬផ្តល់ឧបករណ៍ជ្រើសបញ្ជាក់ច្បាស់ដែលអ្នកគ្រប់គ្រងឥរិយាបថរបស់វា។
ឥរិយាបថ loopback នេះអនុវត្តចំពោះឧបករណ៍ជ្រើសប្រូកស៊ីស្តង់ដាររបស់ Go 1.27.3។ ភាសា និងកម្មវិធីអតិថិជន HTTP ផ្សេងៗអាចប្រើច្បាប់កំណត់ផ្លូវ localhost ខុសគ្នា។