Artikel ini membawakan anda pengetahuan yang relevan tentang go, terutamanya tentang menilai sama ada permintaan adalah http atau https dalam golang (digunakan untuk mendapatkan alamat akses semasa, harap ia membantu semua orang.
Tentukan sama ada permintaan adalah http atau https dalam golang - digunakan untuk mendapatkan alamat akses semasa
Pemaju bebas bebas, log pembangunan sistem perkhidmatan pelanggan dalam talian
Hari ini, kami menambah konfigurasi pada sistem perkhidmatan pelanggan, mengkonfigurasi webhook robot pemberitahuan kumpulan dalaman WeChat perusahaan Apabila mesej baharu tiba, webhook dipanggil dan ditolak ke kumpulan WeChat perusahaan. Kandungan mesej baharu menyokong penurunan harga dan boleh membawa pautan Jika anda ingin membawa pautan URL semasa, anda boleh mengklik terus untuk membalas mesej. Berikut adalah ringkasan mata pengetahuan teknikal yang terlibat.
Jika proksi terbalik seperti nginx tidak digunakan
Kemudian anda boleh terus menggunakan kod berikut untuk mengesahkan medan TLS bagi struktur http.Request menentukan sama ada permintaan digunakan protokol HTTPS. Jika medan ini tidak nol, ini bermakna permintaan menggunakan protokol HTTPS jika tidak, ini bermakna permintaan menggunakan protokol HTTP
package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { if r.TLS != nil { fmt.Println("HTTPS request") } else { fmt.Println("HTTP request") } } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) }
Selepas melalui proksi terbalik
Kod di atas adalah tidak sah, anda boleh menggunakan kaedah berikut
Jika anda menggunakan proksi terbalik nginx, anda perlu memastikan bahawa parameter pengepala berikut X-Forwarded-Proto diluluskan dalam proksi terbalik
location / { proxy_pass http://your_upstream_server; proxy_set_header X-Forwarded-Proto $scheme; }
Anda boleh menilai pengepala ini untuk mengesahkan sama ada https
package main import ( "fmt" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { proto := r.Header.Get("X-Forwarded-Proto") if proto == "https" { fmt.Println("HTTPS request") } else { fmt.Println("HTTP request") } } func main() { http.HandleFunc("/", handler) http.ListenAndServe(":8080", nil) }
Untuk meringkaskan, fungsi untuk mendapatkan alamat akses semasa
//获取当前访问的Host func GetHost(r *http.Request) (Url string) { scheme := "http://" if r.TLS != nil || r.Header.Get("X-Forwarded-Proto") == "https" { scheme = "https://" } return strings.Join([]string{scheme, r.Host}, "")}
[Cadangan berkaitan:Pergi tutorial video】
Atas ialah kandungan terperinci Artikel yang menganalisis cara untuk menentukan sama ada permintaan adalah http atau https dalam pergi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!