我正在使用 Java 制作 telnet 服务器,并且我想检测用户从哪个域连接。就我而言,我有 3 个域(example.com
、example.net
和example.org
)都指向我的 IP,我想为所有这些域托管不同的服务器。我需要检测他们连接到哪个域,以便发送不同的消息。
我知道 Apache 网络服务器与 VirtualHosts 做类似的事情,并且想知道如何在 Java 中做到这一点。
我正在使用 Java 制作 telnet 服务器,并且我想检测用户从哪个域连接。就我而言,我有 3 个域(example.com
、example.net
和example.org
)都指向我的 IP,我想为所有这些域托管不同的服务器。我需要检测他们连接到哪个域,以便发送不同的消息。
我知道 Apache 网络服务器与 VirtualHosts 做类似的事情,并且想知道如何在 Java 中做到这一点。
你真的不能。
Apache 能够使用虚拟主机支持这一点,因为 HTTP 协议在请求内容中包含主机标头,浏览器用 URL 的主机部分填充该主机标头。(参见rfc-2616的第 14.23 节
据我所知,Telnet 不包含这样的标头。最好的检查位置是rfc-854
HTTP 协议与域名密切相关,如果您正在构建服务器,则更有可能满足您的需求Telnet
。这是一个坚如磐石且经过良好改进的协议。
在这种情况下,为什么不使用HTTP
而不是弃用的Telnet
协议呢?
这里的优点是:
HTTP 处理您需要的所有数据。您将能够轻松构建更复杂的应用程序,并访问更广泛的元数据。
使用大量可用于 Java 的 HTTP 堆栈的能力,例如Apache common 的 HTTP Components
兼容性,因为许多应用程序已经能够向您的服务器发送/接收请求。
可扩展性,因为可以根据您的需求变化扩展您的服务器。以您需要保护服务器和客户端之间的流的情况为例。HTTPS 支持嵌入在大多数 Java 的 HTTP 堆栈中。
最后,它会让您知道客户从哪个域提出请求。