with tutorial framework español djangoproject desde con cero applications go httpserver

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