【问题标题】:Get host name of requesting server获取请求服务器的主机名
【发布时间】:2014-09-11 11:15:19
【问题描述】:

假设我有 2 个不同的网站。

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

我需要确保sampledomain1.com 只向sampledomain2.com 提供信息,而不向其他人提供信息。对于这个sampledomain1.com 需要找出请求服务器的主机名是什么。这意味着,sampledomain1.com 应该读到请求来自 sampledomain2.com

我们怎样才能知道?

【问题讨论】:

    标签: java jakarta-ee servlets


    【解决方案1】:
    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 服务器)来执行过滤,但这取决于您的环境。

    【讨论】:

    • 您能否详细说明防火墙或阀门是什么意思。我正在使用 nginx。
    • 在您的服务前面放置(使用)防火墙,只允许来自允许源的数据包。您也可以通过指定 IP 地址/范围来使用 nginx (nginx.org/en/docs/http/ngx_http_access_module.html) 执行此操作。如果你使用 Tomcat 作为应用服务器,你可以添加过滤器(见链接)来允许/拒绝特定的主机。
    【解决方案2】:

    试试这个:

    $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;
    

    【讨论】:

    • 问题是Java相关的,不是PHP
    猜你喜欢
    • 2015-11-10
    • 2022-01-15
    • 2016-03-24
    • 2013-11-20
    • 2018-11-03
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    相关资源
    最近更新 更多