为什么 HttpContext.Current.Request.Url.Host 返回的 URL 与 Web 浏览器中使用的 URL 不同?例如,在浏览器中输入“www.someurl.com”时,HttpContext.Current.Request.Url.Host 变量等于“www.someotherurl.com”。
1 回答
HttpContext.Current.Request.Url.Host
是 ASP.net 应用程序接收的 Host 标头的内容。(有关 HTTP 标头的更多信息,请参见http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.htmlHost
)。
通常 ASP.NET 看到的Host
标头与浏览器发送的标头相同。但是,如果软件或硬件位于浏览器和您的 ASP.net 代码之间并且正在重写Host
标头,则它们可能不匹配。
例如,像 GoDaddy 这样的大型预算托管商这样做,以便他们可以在单个 IIS 网站上支持多个顶级域,即使是在他们更便宜的托管计划中也是如此。GoDaddy 不是创建单独的 IIS 网站(这会增加服务器负载并因此增加成本),而是将http://secondsite.com/的请求重新映射到您的“主”托管站点上的虚拟目录,例如http://firstsite.com /第二站点)。他们将同时更改 Host: 标头和 URL。
顺便说一句,您可以通过转储您的应用程序正在接收的HTTP 请求标头的内容来轻松验证这是发生了什么。
无论如何,如果您想弄清楚谁在更改 Host 标头,请从托管您的 Web 应用程序的人(或负责您的负载均衡器和/或反向代理的团队)开始,因为他们很可能是负责人用于重写您的 Host 标头。