У меня есть служба, работающая в стандартной среде Google App Engine, написанная на Go, которая настроена на использование последней среды выполнения при развертывании (api_version: go1 - в настоящее время Go 1.8).
В этом сервисе я проверяю заголовки запросов для различных целей.
func extractHeaders(res http.ResponseWriter, req *http.Request) {
ctx := appengine.NewContext(req)
clientIPAddress, _, _ := net.SplitHostPort(req.RemoteAddr) // Output is blank
country := req.Header.Get("X-AppEngine-Country") // Output: US
region := req.Header.Get("X-AppEngine-Region") // Output: ?
city := req.Header.Get("X-AppEngine-City") // Output: ?
cityLatLong := req.Header.Get("X-AppEngine-CityLatLong") // Output 0.000000,0.000000
...
}
Как видно из встроенного комментария для строк, начинающихся с того места, где я прочитал поле RemoteAddr, я не получаю результат, который я ожидал согласно документации AppEngine Standard, найденной здесь (Как обрабатываются запросы | Стандартная среда App Engine для Go | Google Cloud Platform).
Хотя в документации указано, что X-AppEngine- * не всегда можно заполнить на основе IP-адреса клиентского запроса, я никогда не вижу, чтобы они были заполнены данными, отличными от тех, которые я перечислил.
Требуется ли какая-либо конфигурация для заполнения этих заголовков (и поля RemoteAddr) в стандартной среде App Engine для Go? Я просто неправильно понимаю документацию?