2013-07-23 75 views
1

我讀過沖突的事情:在ASP.Net(和MVC)中,Request.Url.Host是否返回請求的主機頭?我看到代碼首先檢查Request.Headers["host"],然後降級到使用Request.Url.Host,如果有問題,但我不明白爲什麼需要它們,如果它們是相同的。Request.Url.Host與Request.Headers [「host」]完全相同嗎?

+1

我的猜測是,在涉及反向代理的情況下,這兩個值可能不一樣...... – Icarus

+0

所以我知道REquest.Headers [「host」]直接從主機頭中取值,另一個可能會從中獲得價值嗎? –

回答

8

它們不完全相同。

HttpRequest.Headers["Host"]可讓您直接訪問客戶端到服務器的HTTP標頭。

HttpRequest.Url由ASP.NET重建,它使用傳入的請求的Host:默認頭,但有一個內部設置UseHostHeaderForRequestUrl,如果它被設置爲false則ASP.NET將使用HttpRequest.Headers["SERVER_NAME"]代替,但在某些情況下它使用值"127.0.0.1"來代替。

+0

非常好。所以要一致地獲取主機頭,只需使用「主機」頭。 (我很驚訝這個頭沒有.net包裝...)。謝謝 –

相關問題