go - tutorial - ¿Por qué request.URL.Host y Scheme están en blanco en el servidor de desarrollo?
tutorial django (1)
Básicamente, dado que está accediendo al servidor HTTP no desde un proxy HTTP, un navegador puede emitir una solicitud HTTP relativa, como esta:
GET / HTTP/1.1
Host: localhost:8080
(Dado que, por supuesto, el servidor está escuchando en el puerto localhost 8080).
Ahora, si estaba accediendo a dicho servidor usando un proxy, el proxy puede usar una URL absoluta:
GET http://localhost:8080/ HTTP/1.1
Host: localhost:8080
En ambos casos, lo que obtienes de la http.Request.URL
de Go es la URL en bruto (tal como la analiza la biblioteca). En el caso que obtenga, está accediendo a la URL desde una ruta relativa, de ahí la falta de un host o esquema en el objeto URL.
Si desea obtener el host HTTP, es posible que desee acceder al atributo de Host
de la estructura http.Request
. Ver http://golang.org/pkg/http/#Request
Puede validar eso utilizando netcat
y una solicitud HTTP formateada apropiadamente (puede copiar los bloques anteriores, asegúrese de que haya una línea en blanco detrás en su archivo). Para probarlo:
cat my-http-request-file | nc localhost 8080
Además, puede verificar en el servidor / controlador si obtiene una URL relativa o absoluta en la solicitud llamando al método IsAbs()
:
isAbsoluteURL := r.URL.IsAbs()
Soy muy nuevo en Go. Intenté este primer hola, mundo de la documentación, y quería leer el host y el esquema de la solicitud:
package hello
import (
"fmt"
"http"
)
func init() {
http.HandleFunc("/", handler)
}
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Host: " + r.URL.Host + " Scheme: " + r.URL.Scheme)
}
Pero sus valores están en blanco. ¿Por qué?