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