HttpContext.Current.Request.Url.Host 的起源在哪里?

Tob*_*san 3 asp.net hostname httpcontext

为什么 HttpContext.Current.Request.Url.Host 返回的 URL 与 Web 浏览器中使用的 URL 不同?例如,在浏览器中输入“www.someurl.com”时,HttpContext.Current.Request.Url.Host 变量等于“www.someotherurl.com”。

Jus*_*ant 6

HttpContext.Current.Request.Url.Host是 ASP.net 应用程序接收的 Host 标头的内容。(有关 HTTP 标头的更多信息,请参阅http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.htmlHost)。

Host通常,ASP.NET 看到的标头与浏览器发送的标头相同。但是,如果软件或硬件位于浏览器和 ASP.net 代码之间并重写标头,它们可能会不匹配Host

例如,像 GoDaddy 这样的大型预算托管商就这样做,这样他们就可以在单个 IIS 网站上支持多个顶级域,即使他们的托管计划更便宜。GoDaddy 不会创建单独的 IIS 网站(这会增加服务器负载并因此增加成本),而是会将http://secondsite.com/的请求重新映射到“主”托管站点上的虚拟目录,例如http://firstsite.com /第二个站点)。他们将更改 Host: 标头以及 URL。

顺便说一句,您可以通过转储应用程序正在接收的HTTP 请求标头的内容来轻松验证是否发生了这种情况。

无论如何,如果您想弄清楚谁在更改 Host 标头,请从托管您的 Web 应用程序的人员(或负责负载均衡器和/或反向代理的团队)开始,因为他们可能是负责的人用于重写您的主机标头。