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

Bagaimana Anda Menentukan Skim URL Permintaan dalam Go?

DDD
DDDasal
2024-11-03 06:10:03938semak imbas

How Do You Determine the Request URL Scheme in Go?

Menentukan Skim URL Permintaan dalam Go

Dalam perisian tengah Rack untuk Ruby, memperoleh skema URL permintaan semasa adalah mudah menggunakan kaedah scheme#request. Walau bagaimanapun, dalam Go, medan http.Request.URL.Scheme mengembalikan rentetan kosong, membuatkan pembangun bingung.

Menyingkap Skim

Kunci untuk membuka kunci skema URL permintaan dalam Go terletak pada menyedari bahawa kedua-dua permintaan HTTP dan HTTPS mesti dikendalikan. Dengan menggunakan kedua-dua fungsi http.ListenAndServe() dan http.ListenAndServeTLS(), kami memenuhi kedua-dua protokol.

TLS to the Rescue

HTTPS, sebagai HTTP melalui TLS, menyediakan sifat TLS dalam *http.Permintaan yang mendedahkan maklumat tentang sambungan TLS. Dengan memeriksa sifat ini, kita boleh membezakan protokol yang digunakan:

  • Jika r.TLS bukan nol, permintaan dibuat melalui HTTPS.
  • Jika r.TLS adalah batal, permintaan itu dibuat melalui HTTP.

Pelaksanaan

<code class="go">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>

Pendekatan ini memastikan bahawa permintaan dikendalikan dengan lancar tanpa mengira sama ada ia adalah HTTP atau HTTPS, menyediakan mekanisme yang boleh dipercayai untuk menentukan minta skim URL.

Atas ialah kandungan terperinci Bagaimana Anda Menentukan Skim URL Permintaan 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