По сути, поскольку вы обращаетесь к HTTP-серверу не через HTTP-прокси, браузер может выдать относительный HTTP-запрос, например:
GET / HTTP/1.1
Host: localhost:8080
(Учитывая, конечно, что сервер прослушивает локальный порт 8080).
Теперь, если вы обращались к указанному серверу с помощью прокси-сервера, прокси-сервер может использовать абсолютный URL-адрес:
GET http://localhost:8080/ HTTP/1.1
Host: localhost:8080
В обоих случаях вы получаете от Go http.Request.URL
необработанный URL-адрес (проанализированный библиотекой). В случае, если вы получаете доступ к URL-адресу по относительному пути, отсюда и отсутствие хоста или схемы в объекте URL-адреса.
Если вы хотите получить HTTP-хост, вы можете получить доступ к атрибуту Host
структуры http.Request
. См. http://golang.org/pkg/http/#Request.
Вы можете проверить это, используя netcat
и соответствующим образом отформатированный HTTP-запрос (вы можете скопировать вышеуказанные блоки, убедитесь, что в вашем файле есть пустая строка). Чтобы попробовать:
cat my-http-request-file | nc localhost 8080
Кроме того, вы можете проверить на сервере/обработчике, получаете ли вы относительный или абсолютный URL-адрес в запросе, вызвав метод IsAbs()
:
isAbsoluteURL := r.URL.IsAbs()
person
jmibanez
schedule
02.08.2011