Maison >développement back-end >Golang >URL complète de http.Request

URL complète de http.Request

WBOY
WBOYavant
2024-02-09 13:46:041026parcourir

来自 http.Request 的完整 URL

Contenu de la question

Je dois renvoyer l'adresse URL complète du serveur dans la réponse à la demande, quelle est la meilleure façon ?

func mainpage(w http.responsewriter, r *http.request) {
   if r.method == http.methodpost {
    
       w.write([]byte(r.host + r.requesturi))
   }
}

Je ne comprends pas comment ajouter un protocole ici (http:// ou https://).

localhost:8080/ => http://localhost:8080/

Solution de contournement

Lorsque vous démarrez un serveur http/s, vous pouvez utiliser listenandservelistenandservetls sur différents ports ou les deux en même temps.

Si vous n'en utilisez qu'un seul, il sera évident à partir de listen.. quelle demande de schéma est utilisée, et vous n'aurez pas besoin d'un moyen de la vérifier et de la définir.

Mais si vous servez à la fois sur http et http/s, vous pouvez utiliser request.tls 状态。如果是 nil, ce qui signifie qu'il s'agit de http.

// tls allows http servers and other software to record
    // information about the tls connection on which the request
    // was received. this field is not filled in by readrequest.
    // the http server in this package sets the field for
    // tls-enabled connections before invoking a handler;
    // otherwise it leaves the field nil.
    // this field is ignored by the http client.
    tls *tls.connectionstate

Exemple :

func index(w http.ResponseWriter, r *http.Request) {
    scheme := "http"
    if r.TLS != nil {
        scheme = "https"
    }
    w.Write([]byte(fmt.Sprintf("%v://%v%v", scheme, r.Host, r.RequestURI)))
}

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer