[英]How to emulate a browser HTTPS POST request with Java (Apache HTTP Client)?
[英]How to determine public ip of client in HTTP and HTTPS request?
我已经阅读了各种博客,并做了一些实际的工作,但是在所有可能的情况下,都无法获得确定性的完整证据来确定获取客户端公共IP的方法。 服务器端的配置为: F5 <-> Apache Web服务器<-> Tomcat |
在代码中,我首先获取并解析请求标头X-FORWARDED-FOR
以获取最左边的公共ip。 如果找不到,我将依赖request.getRemoteAddr()
。
所以问题是:
在某些情况下,此方法效果很好,但在协议为HTTPS时失败。 在这种情况下可以做什么?
如果X-Forwarded-For
没有任何值,则我必须依赖request.getRemoteAddr()
,它始终为我的服务器提供IP。 这是因为位于之间的apache Web服务器,而getRemoteAddr
返回发送请求的客户端或最后一个代理的地址。 如何克服这种情况?
除了X-forwarded-for
外,我还应该读取其他任何标头吗?
还有哪些其他可能的情况应该处理?
String forwardedHeader = servletRequest.getHeader("X-Forwarded-For");
clientIP = servletRequest.getRemoteAddr();
String forwarded = "";
if (forwardedHeader != null && !forwardedHeader.isEmpty())
{
forwarded = forwardedHeader;
int commaIdx = forwarded.indexOf(',');
if (commaIdx > 0)
{
clientIP = forwarded.substring(0, commaIdx);
}
forwarded = forwarded.replace(',', '|');
}
if (forwarded != null && !forwarded.isEmpty())
{
clientIP = forwarded;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.