Apabila melaksanakan pelayan HTTP mudah dalam Go menggunakan pakej http, anda mungkin menghadapi nilai kosong untuk permintaan. URL.Host dan request.URL.Skim semasa pembangunan. Ini boleh membingungkan kerana anda menjangkakan medan ini memberikan maklumat tentang permintaan itu. Mari kita siasat sebab tingkah laku ini berlaku dan terokai cara untuk mendapatkan data yang hilang.
Dalam kod contoh anda, mesej permintaan diterima melalui laluan relatif. Ini bermakna permintaan HTTP pelanggan tidak termasuk URL mutlak dengan hos dan skema yang dinyatakan dengan jelas. Sebaliknya, pelanggan menggunakan laluan relatif, membiarkan medan ini kosong.
Walau bagaimanapun, jika permintaan dibuat melalui proksi HTTP atau menggunakan URL mutlak, request.URL.Host dan request.URL.Scheme akan diisi, kerana proksi atau pelanggan akan membekalkan maklumat ini secara eksplisit.
Untuk mengesahkan ini, anda boleh menguji pelayan anda dengan format permintaan yang berbeza menggunakan alat seperti netcat. Menghantar permintaan dengan laluan relatif akan menghasilkan medan Hos dan Skim kosong, manakala menggunakan URL mutlak akan mengisinya.
Sebagai alternatif kepada bergantung semata-mata pada permintaan.URL.Host, anda boleh mengakses medan Hos secara langsung daripada struct http.Request, yang akan memberikan maklumat hos tidak kira sama ada permintaan itu menggunakan relatif atau mutlak laluan.
Selain itu, anda boleh menyemak sama ada permintaan yang diterima oleh pengendali anda adalah mutlak atau relatif menggunakan kaedah IsAbs() permintaan.URL struct. Ini membolehkan anda mengendalikan permintaan dengan laluan relatif dengan sewajarnya.
Atas ialah kandungan terperinci Mengapa request.URL.Host dan request.URL.Scheme Kosong dalam Pelayan Pembangunan HTTP My Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!