Mencari Skim URL Permintaan dalam Go
Dalam Ruby/Rack, mendapatkan semula skema URL permintaan semasa adalah mudah menggunakan kaedah skim#permintaan. Walau bagaimanapun, dalam Go, http.Request.URL.Scheme menghasilkan rentetan kosong.
Memahami Isu
Sebab di sebalik rentetan kosong ialah Go menyokong penyajian kedua-duanya HTTP dan HTTPS secara lalai. Apabila hanya menggunakan http.ListenAndServe(), anda hanya menyediakan HTTP. Sebaliknya, hanya menggunakan http.ListenAndServeTLS() mengehadkan anda kepada HTTPS.
Penyelesaian: Menggunakan Keadaan Sambungan TLS
Untuk menyelesaikan isu ini, manfaatkan sifat TLS http. Permintaan. Sifat ini menyediakan *tls.ConnectionState, mendedahkan maklumat tentang sebarang TLS yang digunakan dalam permintaan. Dengan menyemak sifat TLS, anda boleh menentukan skema yang digunakan oleh pelanggan:
<code class="go">func handler(w http.ResponseWriter, r *http.Request) { if r.TLS == nil { fmt.Fprintf(w, "HTTP") } else { fmt.Fprintf(w, "HTTPS") } }</code>
Fungsi Utama Dikemas Kini
Selain itu, sediakan kedua-dua protokol HTTP dan HTTPS dengan menggunakan kedua-dua fungsi mendengar:
<code class="go">func main() { http.HandleFunc("/", handler) go func() { log.Fatal(http.ListenAndServeTLS(":8443", "localhost.crt", "localhost.key", nil)) }() log.Fatal(http.ListenAndServe(":8080", nil)) }</code>
Atas ialah kandungan terperinci Bagaimana untuk Menentukan Skim URL Permintaan dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!