Maison  >  Article  >  développement back-end  >  Comment déterminer le schéma de l'URL de la requête actuelle dans Go ?

Comment déterminer le schéma de l'URL de la requête actuelle dans Go ?

DDD
DDDoriginal
2024-11-03 17:35:03745parcourir

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

Déterminer le schéma de l'URL de la requête actuelle dans Go

Dans Ruby/Rack, le schéma de l'URL de la requête actuelle peut être récupéré à l'aide de schéma#request. Cependant, dans Go, http.Request.URL.Scheme renvoie une chaîne vide. Pour obtenir le schéma correctement, vous devez considérer l'approche suivante :

Le service des protocoles HTTP et HTTPS nécessite l'utilisation simultanée de http.ListenAndServe() et http.ListenAndServeTLS() avec le même gestionnaire. En utilisant uniquement http.ListenAndServe(), vous écoutez exclusivement le protocole HTTP.

HTTPS, étant HTTP sur TLS, fournit une propriété TLS dans l'objet http.Request. Cette propriété renvoie un objet *tls.ConnectionState, qui contient des informations sur le TLS utilisé pour la requête.

Pour déterminer le schéma utilisé par le client, inspectez la propriété TLS de la requête :

  • Si r.TLS n'est pas nul, le schéma était HTTPS.
  • Si r.TLS est nul, le schéma était HTTP.

Voici un exemple de code mis à jour qui démontre cette approche :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn