Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menentukan Skim URL Permintaan Semasa dalam Go?

Bagaimana untuk Menentukan Skim URL Permintaan Semasa dalam Go?

DDD
DDDasal
2024-11-03 17:35:03854semak imbas

How to Determine the Scheme of the Current Request URL in Go?

Tentukan Skim URL Permintaan Semasa dalam Go

Dalam Ruby/Rack, skema URL permintaan semasa boleh diambil menggunakan scheme#request. Walau bagaimanapun, dalam Go, http.Request.URL.Scheme mengembalikan rentetan kosong. Untuk mendapatkan skema dengan betul, anda mesti mempertimbangkan pendekatan berikut:

Menyajikan protokol HTTP dan HTTPS memerlukan penggunaan serentak kedua-dua http.ListenAndServe() dan http.ListenAndServeTLS() dengan pengendali yang sama. Dengan hanya menggunakan http.ListenAndServe(), anda mendengar secara eksklusif untuk protokol HTTP.

HTTPS, sebagai HTTP melalui TLS, menyediakan sifat TLS dalam objek http.Request. Sifat ini mengembalikan objek *tls.ConnectionState, yang mengandungi maklumat tentang TLS yang digunakan untuk permintaan.

Untuk menentukan skim yang digunakan oleh pelanggan, periksa sifat TLS permintaan:

  • Jika r.TLS bukan sifar, skema itu ialah HTTPS.
  • Jika r.TLS sifar, skema itu ialah HTTP.

Berikut ialah contoh kod yang dikemas kini yang menunjukkan pendekatan ini :

<code class="go">package main

import (
    "fmt"
    "log"
    "net/http"
    "net/http/httputil"
)

func handler(w http.ResponseWriter, r *http.Request) {
    // ...
    if r.TLS == nil {
        // the scheme was HTTP
    } else {
        // the scheme was HTTPS
    }
}

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 Semasa dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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