Holen Sie sich das Schema des aktuellen request-URL

In Ruby/Rack, ich bin in der Lage,Holen Sie sich das Schema der aktuelle request-URL aus Schema#request. Jedoch, im Gehen, http.Anfrage.URL.Schema einen leeren string zurück:

package main

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

func main() {
    http.HandleFunc("/", handler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "%#v\n", r.URL.Scheme) //Always shows empty string
}

Wie bekomme ich das Schema des aktuellen request-URL?

  • Sie können prüfen r.Proto es zurück HTTP/1.1 oder HTTP/2 entsprechend mit der Dokumentation, aber nicht sicher, ob es wird sich ändern für HTTPS
  • r.Proto nur HTTP/2 wenn die Go-Anwendung wird beendet, TLS selbst, D. H. mit http.ListenAndServeTLS().
  • Da Sie Verwendung ListenAndServe und nicht ListenAndServeTLS, Ihr Schema kann sicher angenommen werden, als http. Wenn Sie beide verwenden tls-und nicht-tls-Versionen, die Sie verwenden können, r.TLS und überprüfen Sie es auf null, um zu wissen, ob die TLS-gegründet wurde. Wenn Ihr go app läuft hinter einem reverse-proxy, es gibt praktisch keine Möglichkeit zu wissen, was das Programm war.
  • deine Antwort ist wirklich die einzige WIRKLICHE gültige Antwort hier, unter Berücksichtigung viele apps laufen nun hinter webservices (wie z.B. nginx), die möglicherweise oder möglicherweise nicht beenden TLS für die app, in einer bestimmten Umgebung.
InformationsquelleAutor Ethan | 2016-11-27
Schreibe einen Kommentar