代码之家  ›  专栏  ›  技术社区  ›  Khaled Musaied

request.url.toString()返回嵌套在域中的计算机名

  •  1
  • Khaled Musaied  · 技术社区  · 15 年前

    当我在服务器上部署应用程序时,我遇到了这个问题:

    Request.Url.ToString(); 返回计算机名而不是域名。

    例如:

    而不是返回 http://www.domainName.com/default.aspx 它返回 http://appserver-01/default.aspx .

    注: 部署前一切正常。

    7 回复  |  直到 13 年前
        1
  •  5
  •   devstuff    15 年前

    听起来可能是以下一种或多种情况:

    1. 您的服务器位于防火墙和/或负载均衡器后面,这些防火墙和/或负载均衡器正在剥离 Host: 请求的标题。

    2. 检查IIS配置-绑定列表应包括 domainName.com www.domainName.com 而不是空白(默认站点)。

    3. 您是从公司网络内部还是外部发出请求?网络管理员配置的内部DNS可能与外部DNS不同。

    将此代码删除为 ServerVariables.aspx 在你的网站上的某个地方( 暂时地 :它公开服务器配置信息),并将转储请求头:

    <%@ Page Language="C#" Theme="" %>
    <html>
    <head>
    <title>Server Variables</title>
    <style>
    thead th {border-bottom: 2px solid  #000000; padding: 2px 8px; font-size: 130%; text-align: left;}
    tbody td {border-bottom: 1px dotted #999999; padding: 2px 8px;}
    </style>
    </head>
    <body>
    <table cellpadding="0" cellspacing="0">
     <thead>
      <tr>
       <th>Server Variable</th>
       <th>Value</th>
      </tr>
     </thead>
     <tbody><%
        foreach (string name in Request.ServerVariables)
        {
    %>
      <tr>
       <td><pre><%= name %></pre></td>
       <td><pre><%= Request.ServerVariables[name] %>&nbsp;</pre></td>
      </tr><%
        }
    %>
     </tbody>
    </table>
    </body>
    </html>
    
        2
  •  1
  •   Ben Lesh    15 年前

    好吧,在我深入研究Reflector时,我觉得request.url中包含的uri对象肯定是根据来自请求头的信息构建的。

    有鉴于此,我怀疑,可能进来的请求不是你想象的那样。尝试查看进入服务器的请求中的原始头。我会用一个包嗅探器,我敢打赌它们反映了你看到的问题。如果是这样的话,问题不在你的网络服务器上,而是在前面的某个地方。

    您是否在某个地方设置了可能导致此问题的转发?像某种域控制器做的HTTP转发?您是否有任何自定义的httphandler在处理请求之前对其进行了处理?如果你这样做了,我会去那里看看。如果你不认为你这样做,请向你的网络管理员(如果你有)请教以确保安全。

    这一切都是暗箭伤人,因为我不知道你的整个安排。但这是我最好的猜测。

    祝你好运!

        3
  •  1
  •   Kamil Szot    15 年前

    主机头(即request.url获取域名的位置)由从外部代理流量的计算机重写。

    原始域位于头X-Forwarded-Host中。你应该从那里读。

    还可以强制代理保留主机头。如果代理是apache mod_proxy,则可以使用指令:

    proxyReserveHost打开

        4
  •  1
  •   James Lawruk    13 年前

    我有同样的问题,我用这个代码代替:

    "http://" + 
    Request.ServerVariables["HTTP_HOST"] + 
    Request.ServerVariables["URL"]
    
        5
  •  0
  •   DmitryK    15 年前

    我们也有类似的问题。在我们的例子中,第一个请求是什么(在iisreset之后)。如果你用这个网址点击它: http://appserver-01/default.aspx 然后它会继续使用它。

    尝试以下操作: 1。IISHeSET 2。请求此URL: http://www.domainNmae.com/default.aspx 三。查看问题是否已解决

        6
  •  0
  •   tsilb    15 年前

    您还可以研究无数其他方法来解析URL或域。例如,request.rawurl通常返回在地址栏中键入的内容,等等。

        7
  •  0
  •   Rodrigo    15 年前

    什么值返回此调用?

    Request.ServerVariables("SERVER_NAME");
    Request.ServerVariables("HTTP_HOST");