本文摘自php中文网,作者coldplay.xixi,侵删。

golang如何获取客户端ip?
golang获取客户端ip的方法:
ClientIP方法与ClientPublicIP方法的实现类似,只是一个按照http协议约定获取客户端ip, 一个按照约定格式查找到公网ip。
在网络与服务架构、业务逻辑复杂的环境中,按照http协议约定的方式,并非总能获取到真实的ip,在我们的业务中用户流量经由三方多层级转发(都是三方自己实现的http client) ,难免会出现一些纰漏,这时越往后的服务获取用户真实ip越加困难,你甚至不知道自己获取的ip是否是真实的。
但是我们的客户经由三方转发而来的流量,那么客户极大多数甚至排除测试之外都是公网用户,结合使用 ClientPublicIP 和 ClientIP 方法总能更好的获取用户的真实ip
1 2 3 4 5 |
|
用上面的方法总能有效的获取用户真实的ip地址,下面分析下两个方法的具体实现。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
ClientIP首先读取X-Forwarded-For header中用 , 分隔的第一个ip地址,如果这个地址不存在,就会从X-Real-Ip header中获取,如果还是不存在,说明流量并非是由反向代理转发而来,而是客户端直接请求服务,这时通过http.Request.RemoteAddr字段截取除去端口号的ip地址。
相关阅读 >>
手撸golang 仿spring ioc/aop 之11 增强2
更多相关阅读请进入《golang》频道 >>

Go语言101
一个与时俱进的Go编程知识库。