首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在Google App Engine Standard Env for Go中获得request.RemoteAddr和X-AppEngine的输出-国家、地区等?

如何在Google App Engine Standard Env for Go中获得request.RemoteAddr和X-AppEngine的输出-国家、地区等?
EN

Stack Overflow用户
提问于 2018-01-19 16:22:48
回答 1查看 921关注 0票数 0

我有一个在Google App Engine标准环境中运行的服务,它是用Go编写的,配置为在部署时使用最新的运行时(api_version: go1 -当前是Go 1.8)。

在此服务中,我出于各种目的检查请求标头。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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标准文档找到的here (请求是如何处理的|适用于Go | Google Cloud Platform的应用程序引擎标准环境),我没有得到预期的输出。

虽然文档指出X-AppEngine-*可能并不总是能够根据客户端请求的IP地址填充,但我从未看到它们填充了我列出的以外的数据。

在App Engine Standard Environment for Go中填充这些头文件(和RemoteAddr字段)需要配置吗?我只是误解了文档吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-20 06:22:02

需要注意的一件事是,req.RemoteAddr最终将获得应用链中最后一个代理的IP地址。在App Engine上,最终可能会是127.0.0.1。net.SplitHostPort可能出错,因为IP实际上可能没有端口号。

地区、城市和CityLatLong数据将来自您的IP,如果这些信息可用,它可能不是必须的。您可以尝试从X-Forwarded-For报头中提取IP地址。这通常会为您提供代理的完整列表和原始IP地址(IPv4或IPv6,请参阅下面的示例结果)。

如果您要使用: package hello

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import (
    "fmt"
    "net"
    "net/http"
)

func init() {
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
    clientIPAddress, _, err := net.SplitHostPort(r.RemoteAddr)
    if err != nil {
        clientIPAddress = err.Error()
    }
    rAddr := r.RemoteAddr
    forward := r.Header.Get("x-forwarded-for")
    country := r.Header.Get("X-AppEngineCountry")
    region := r.Header.Get("X-AppEngine-Region")
    city := r.Header.Get("X-AppEngine-City")
    cityLatLong := r.Header.Get("X-AppEngine-CityLatLong")
    fullHeader := r.Header
    fmt.Fprintf(w, "Hello, world!\n %v\n %v\n %v\n %v\n %v\n %v\n %v\n %v",
        clientIPAddress,
        rAddr,
        forward,
        country,
        region,
        city,
        cityLatLong,
        fullHeader
    )
}

您应该看到类似于(只要Region City、CityLatLong可用,否则将为空)的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Hello, world!
 missing port in address 127.0.0.1
 127.0.0.1
 2601:1c2:600:17b0::::, 2607:f8b0:400a:::2014
 ZZ
 or
 portland
 45.523452,-122.676207
 map[Accept-Encoding:[identity] X-Appengine-Default-Version-Hostname:
[127.0.0.1:8080] X-Appengine-User-Organization:[] X-Appengine-Citylatlong:
[45.523452,-122.676207] X-Appengine-Request-Log-Id:
[48f03baada92bbb3872a8b3a5baa3f8b0dfff413f64fbcfa] X-
Appengine-City:[portland] X-Forwarded-Proto:[https] X-Appengine-Server-Name:
[127.0.0.1] Via:[1.1 google] X-Appengine-Server-Software:[Development/2.0] 
X-Appengine-User-Id:[] X-Forwarded-For:
[2601:1c2:600:17b0:::: 2607:f8b0:400a:::2014] X-Goog-
Cloud-Shell-Target-Host:[127.0.0.1] X-Appengine-Country:[ZZ] Accept:
etc
etc

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48345409

复制
相关文章
4KB 扇区磁盘上的 Linux:实际建议
为何更改为 4096 字节扇区? 如果您熟悉磁盘结构,就知道磁盘是被分解成扇区 的,大小通常是 512 字节;所有读写操作均在成倍大小的扇区中进行。仔细查看,就会发现硬盘事实上在扇区之间包括大量额外数据,这些额外字节由磁盘固件使用,以检测和纠正每个扇区内的错误。随着硬盘变得越来越大,越来越多的数据需要存储在磁盘的每一单位面积上,导致更多低级别错误,从而增加了固件纠错功能的负担。 解决该问题的一个方法是将扇区大小从 512 字节增加为更大的值,以使用功能更强大的纠错算法。这些算法可使每个字节使用较少的数据,从
小小科
2018/05/02
3.4K2
4KB 扇区磁盘上的 Linux:实际建议
Transformers 如何模仿大脑的某些部分
来源:ScienceAI 本文约2500字,建议阅读7分钟 本文将演示如何通过阈值调优来提高模型的性能。 了解大脑如何组织和访问空间信息「我们在哪里」,「拐角处有什么」,「如何到达那里」,这仍然是一项艰巨的挑战。该过程涉及从数百亿个神经元中调用整个记忆网络和存储的空间数据,每个神经元都连接到数千个其他神经元。 神经科学家已经确定了关键元素,例如网格细胞、映射位置的神经元。但更深入将被证明是棘手的:并不是说研究人员可以移除或研究人类灰质的切片来观察基于位置的图像、声音和气味记忆是如何流动并相互连接的。 人工
数据派THU
2022/10/09
6380
Transformers 如何模仿大脑的某些部分
硬盘对数据库性能的影响
总体来讲,相当于一个i5+4G+500G传统硬盘的配置了,在当时看来还是不错的,但是不用不知道,这个AMD的使用情况不容乐观,散热问题相当严重,感觉比intel的处理器差好多,一打dota就发热,热到手都放不上去,夏天更甚。当时也不怎么卡,因为第一台电脑,我也算比较爱惜,这一用就是6年。刷机刷了无数次,安装过各种各样的软件和各种各样的操作系统,最后实在是无法挽救了。
AsiaYe
2019/11/06
2.4K0
硬盘对数据库性能的影响
[硬件]关于SPI Flash那些你不知道的事儿
以华邦W25Q128为例,详解SPI Flash的特点,读写注意事项,和地址范围等。
单片机点灯小能手
2020/07/17
5.9K0
[硬件]关于SPI Flash那些你不知道的事儿
Windows Server 2008 R2 安装 media Service 部分更新没有安装 KB963697
1、下载安装包 Windows6.1-KB963697-x64.msu 2、安装过程失败,提示未安装更新 我是阿里云的服务器,一直出现下面提示 经过反复研究,确定系统问题,重新恢复了初始系统,再进行安
阿炬
2018/05/11
1.1K0
微软确认Windows 10累积更新KB4482887中的新问题
微软刚刚确认了Windows 10版本1809累积更新KB4482887中存在的一个新问题,公司表示已收到有关游戏性能可能受到影响的报告。在对原始KB4482887页面的更新中,微软表示已经开始修复该问题,它应该包含在即将发布的版本中。
Zip
2019/03/18
5470
微软确认Windows 10累积更新KB4482887中的新问题
微软确认Windows 10累积更新KB4482887中的新问题
微软刚刚确认了Windows 10版本1809累积更新KB4482887中存在的一个新问题,公司表示已收到有关游戏性能可能受到影响的报告。在对原始KB4482887页面的更新中,微软表示已经开始修复该问题,它应该包含在即将发布的版本中。
Zip
2019/04/28
6070
微软确认Windows 10累积更新KB4482887中的新问题
【STM32F407】第5章 ThreadX NetXDUO网络协议栈介绍
本章节介绍 ThreadX NetXDUO网络协议栈,让大家对NetXDUO有一个整体的了解。
Simon223
2021/04/19
6380
【STM32F407】第5章   ThreadX NetXDUO网络协议栈介绍
【STM32F429】第5章 ThreadX NetXDUO网络协议栈介绍
本章节介绍 ThreadX NetXDUO网络协议栈,让大家对NetXDUO有一个整体的了解。
Simon223
2021/04/19
5840
【STM32F429】第5章   ThreadX NetXDUO网络协议栈介绍
FATFS中的NAND FLASH的簇和扇区
最近使用FATFS读写NANDFLASH,研究了一下小型文件系统的中的簇和扇区的具体含义,簇是文件系统使用的单位,扇区是物理介质(FLASH)使用的单位。
用户9736681
2022/05/11
1.9K0
【STM32H7】第5章 ThreadX NetXDUO网络协议栈介绍
最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=104619 第5章 ThreadX NetXDUO网络协议栈介绍 本章节介绍 T
Simon223
2021/04/19
9590
【STM32H7】第5章   ThreadX NetXDUO网络协议栈介绍
拆解固态硬盘结构
前面几篇文章,主要围绕的是机械硬盘来说的。目前ssd目前应用也越来越广了,值得我们花精力琢磨琢磨。SSD硬盘是地地道道电子技术下的产品,因为不像机械硬盘IO时依赖两个耗时的机械轴行为:磁盘旋转,以及磁道寻道,SSD硬盘的访问延迟要比机械硬盘要低的多,在随机IO下的表现尤其明显。我们今天从最底层出发,看看SSD的几个内部机理。
开发内功修炼
2022/03/28
2K0
拆解固态硬盘结构
Oracle数据库部分迁至闪存存储方案
环境:Oracle 11.2.0.4 RAC(2 nodes) 说明:假设新增闪存挂载点是/flash(使用了第三方的集群文件系统),如果是使用Oracle的ASM,则本文提及的所有/flash目录都可以认定是新的闪存磁盘组是+FLASH。
Alfred Zhao
2019/05/24
5670
手机卡顿-闪存要担部分责任
手机,电脑越来越卡怎么回事!!! 小提莫粗浅的解答一下。(排除机械硬盘)机械硬盘太慢了
用户1113710
2021/06/09
8450
手机卡顿-闪存要担部分责任
解决android studio 无法更新插件的问题(某些)
我相信很有朋友会像我一样遇到这样的情况:android studio 提示插件需要更新,但是由于网络的原因,无法更新,这里笔者提供GsonFormat和genymotion的最新jar包下载地址,每次提示更新就去这里下载最新的就好了。
103style
2022/12/19
1.3K0
mysql更新字段中的部分内容
在实践中,会出现某些字段中的内容变了,比如三方提供的图标地址变了,那么或许对字段中存储的图片域名进行更新,此时就需要用到mysql更新字段中的部分内容的功能。
程序新视界
2020/05/18
2.4K0
(39)STM32——FLASH闪存
        通过这两个步骤,即可解锁 FLASH_CR,如果写入错误,那么 FLASH_CR 将被锁定,直到下次复位后才可以再次解锁。
小点点
2022/12/12
1.4K0
(39)STM32——FLASH闪存
基于STM32的Flash擦除方式
本文主要介绍STM32的内部Flash擦除方式和擦除长文件的功能函数怎样编写。并且介绍一些注意事项,如只想擦除当前地址,却发现上下地址都出现了擦除等问题。阅读完本文可以使你能够正常的完成Flash擦除。并对擦除时会影响的地址大小有一个深入的认识,并在对页擦除时,页的起始地址和大小有所了解。
跋扈洋
2022/05/31
3.4K3
基于STM32的Flash擦除方式
常见的非易失存储器简介
非易失存储器(Non-Volatile Memory,NVM)是一种能够在断电后保持存储数据的计算机存储器。
用户10524139
2023/04/22
2K0
fastapi PUT更新数据 / PATCH部分更新
learn from https://fastapi.tiangolo.com/zh/tutorial/body-updates/
Michael阿明
2022/01/07
1.4K0
fastapi PUT更新数据 / PATCH部分更新

相似问题

如何使用带256 on擦除扇区的闪存芯片上的文件系统

12

刻录到闪存的特定扇区

21

如何用C检查闪存设备的坏扇区?

20

256 KB的缓存大小真的是256 KiB吗?

49

在linux中从USB闪存访问扇区

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文