2010-04-28 70 views
2

爲什麼HttpContext.Current.Request.Url.Host比在Web瀏覽器中使用的URL返回不同的URL?例如,當在瀏覽器中輸入「www.someurl.com」時,HttpContext.Current.Request.Url.Host變量等於「www.someotherurl.com」。HttpContext.Current.Request.Url.Host的來源在哪裏?

+0

很好,有什麼不同呢?它是否像你要求http://www.cnn.com但Url.Host顯示「www.disney.com」還是在那裏有一些合理的模式? – 2010-04-28 18:24:23

+0

他們很相似。比較接近的例子是,在瀏覽器中輸入的URL是「www.mysite.net」,但Url.Host變量返回「www.mysitexy.net」。它只是主機名的最後兩個字母,「xy」,正在被添加。我相信它可能只與防火牆內部的mysitexy和防火牆內部和外部的mysite有關。 – 2010-04-28 18:38:17

回答

4

HttpContext.Current.Request.Url.Host在於ASP.net應用程序接收主機頭的內容。 (有關HTTP標頭的更多信息,請參閱http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html,例如Host)。

通常認爲ASP.NET看到頭與由瀏覽器發送的Host報頭。但是,如果軟件或硬件位於瀏覽器和ASP.net代碼之間,並且正在重寫頭文件,它們可能不匹配。

例如,大規模預算託管例如GoDaddy做到這一點,使他們能夠支持單個IIS網站的多個頂級域名,甚至對他們的便宜的託管計劃。 GoDaddy不會創建單獨的IIS網站(這會增加服務器負載並因此增加成本),而是將http://secondsite.com/的請求重新映射到「主要」託管站點上的虛擬目錄,例如, http://firstsite.com/secondsite)。他們將改變主機:標題以及URL。

順便說一句,你可以很容易地驗證這是什麼傾倒的HTTP Request Headers您的應用程序正在接收的內容發生。

無論如何,如果您想弄清楚誰在更改Host頭部,請先從託管您的Web應用的人員(或負責您的負載平衡器和/或反向代理的團隊)開始,因爲他們是可能是負責重寫你的主機頭的人。