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