Wie bestimme ich das Schema der aktuellen Anforderungs-URL in Go?

DDD
Freigeben: 2024-11-03 17:35:03
Original
797 Leute haben es durchsucht

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

Schema der aktuellen Anfrage-URL in Go bestimmen

In Ruby/Rack kann das Schema der aktuellen Anfrage-URL mit scheme#request abgerufen werden. In Go gibt http.Request.URL.Scheme jedoch eine leere Zeichenfolge zurück. Um das Schema korrekt zu erhalten, müssen Sie den folgenden Ansatz berücksichtigen:

Die Bereitstellung von HTTP- und HTTPS-Protokollen erfordert die gleichzeitige Verwendung von http.ListenAndServe() und http.ListenAndServeTLS() mit demselben Handler. Indem Sie nur http.ListenAndServe() verwenden, lauschen Sie ausschließlich auf das HTTP-Protokoll.

HTTPS stellt als HTTP über TLS eine TLS-Eigenschaft im http.Request-Objekt bereit. Diese Eigenschaft gibt ein *tls.ConnectionState-Objekt zurück, das Informationen über das für die Anfrage verwendete TLS enthält.

Um das vom Client verwendete Schema zu bestimmen, überprüfen Sie die TLS-Eigenschaft der Anfrage:

  • Wenn r.TLS nicht Null ist, war das Schema HTTPS.
  • Wenn r.TLS Null ist, war das Schema HTTP.

Hier ist ein aktualisiertes Codebeispiel, das diesen Ansatz demonstriert :

<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>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie bestimme ich das Schema der aktuellen Anforderungs-URL in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage