【问题标题】:In which case the getRemoteHost method returns an IP address instead of the hostname?在这种情况下,getRemoteHost 方法返回 IP 地址而不是主机名?
【发布时间】:2013-02-13 22:35:03
【问题描述】:

在我们专用网络的服务器上,我们有一个 HttpServlet,它被同一网络的 PC 联系。

我们需要知道与服务器联系的客户端的主机名。为此,我们称 HttpServletRequest 的 getRemoteHost 方法。

有时此方法返回客户端的 PC 名称(想要的行为),有时此方法返回 IP 地址。 (同一个客户端,同一个服务器,同一个专用网络)

API 说:

java.lang.String getRemoteHost()

返回客户端的完全限定名称或发送请求的最后一个代理。如果引擎不能或选择不解析主机名(以提高性能),则此方法返回 IP 地址的点分字符串形式。 对于 HTTP servlet,与 CGI 变量的值相同 REMOTE_HOST

返回: 包含客户端完全限定名称的字符串

我看到对于 HTTP servlet,该值与 CGI 变量 REMOTE_HOST 相同。这是什么意思?是否由服务器决定解析地址?有没有办法强制这种行为?

【问题讨论】:

  • 服务器只知道 IP 地址,要获取主机名,它需要进行反向查找。如果您想获取 FQDN,您可以随时手动执行此操作

标签: java networking


【解决方案1】:

例如,在 Tomcat 中,连接器有一个设置“enableLookups”,出于性能原因默认禁用该设置。见http://tomcat.apache.org/tomcat-7.0-doc/config/http.html

其他容器可能有不同的方法来做同样的事情。

【讨论】:

    猜你喜欢
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    • 2021-12-31
    • 2016-03-23
    • 2014-03-31
    相关资源
    最近更新 更多