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

藏色散人
Lepaskan: 2023-03-02 19:56:18
ke hadapan
3648 orang telah melayarinya

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)
}
Salin selepas log masuk

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;
}
Salin selepas log masuk

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)
}
Salin selepas log masuk

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}, "")}
Salin selepas log masuk

[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!

Label berkaitan:
sumber:learnku.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan