获取请求服务器的主机名称

问题描述:

说我有2个不同的网站。获取请求服务器的主机名称

  1. sampledomain1.com(包含资源要取)
  2. sampledomain2.com(实现的Apache HttpClient的,以作出获取资源Get请求从sampledomain1.com

我需要做确定sampledomain1.com只提供信息给sampledomain2.com而没有其他人为此sampledomain1.com需要找出什么是请求服务器的主机名,这意味着,sampledomain1.com应该读取请求来自sampledomain2.com

我们如何知道?

试试这个:

$allowed_hosts = array('foo.example.com', 'bar.example.com'); 
if (!isset($_SERVER['HTTP_HOST']) || !in_array($_SERVER['HTTP_HOST'], $allowed_hosts)) { 
    header($_SERVER['SERVER_PROTOCOL'].' 400 Bad Request'); 
    exit; 
+0

问题是与Java有关,而不是PHP – mp911de 2014-09-11 11:26:32

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 

    if(req.getRemoteHost().endsWith("sampledomain1.com") || req.getRemoteHost().endsWith("sampledomain2.com")) { 
     // ... code goes here. 
    } 
} 

您可以使用HttpServletRequest.getRemoteAddr()HttpServletRequest.getRemoteHost()检索调用者的详细信息。也许你应该使用防火墙或者阀门(http://tomcat.apache.org/tomcat-7.0-doc/config/valve.html#Remote_Host_Filter)(或者应用服务器前的Apache HTTPd服务器)来执行过滤,但这取决于你的环境。

+0

请您详细说明防火墙或阀门的含义。我正在使用nginx。 – Abhi 2014-09-11 11:50:49

+0

在您的服务前放置(使用)防火墙,该防火墙仅允许来自允许源的数据包。您也可以通过指定IP地址/范围,使用nginx(http://nginx.org/en/docs/http/ngx_http_access_module.html)执行此操作。如果您将Tomcat用于应用程序服务器,则可以添加过滤器(请参阅链接)以允许/拒绝特定主机。 – mp911de 2014-09-11 11:56:36

+0

好吧,我明白了。很好的建议,谢谢。 – Abhi 2014-09-11 12:09:14