Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Artikel yang menganalisis cara untuk menentukan sama ada permintaan adalah http atau https dalam pergi

Artikel yang menganalisis cara untuk menentukan sama ada permintaan adalah http atau https dalam pergi

藏色散人
藏色散人ke hadapan
2023-03-02 17:11:023635semak imbas

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!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam