go - Why are request.URL.Host and Scheme blank in the development server? -


i'm new go. tried first hello, world documentation, , wanted read host , scheme request:

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

but values both blank. why?

basically, since you're accessing http server not http proxy, browser can issue relative http request, so:

get / http/1.1 host: localhost:8080 

(given that, of course, server listening on localhost port 8080).

now, if accessing said server using proxy, proxy may use absolute url:

get http://localhost:8080/ http/1.1 host: localhost:8080 

in both cases, go's http.request.url raw url (as parsed library). in case you're getting, you're accessing url relative path, hence lack of host or scheme in url object.

if want http host, may want access host attribute of http.request struct. see http://golang.org/pkg/http/#request

you can validate using netcat , appropriately formatted http request (you can copy above blocks, make sure there's trailing blank line after in file). try out:

cat my-http-request-file | nc localhost 8080 

additionally, check in server/handler whether relative or absolute url in request calling isabs() method:

isabsoluteurl := r.url.isabs() 

Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -