大家好,在使用 Visual Studio 2008 (Cassini) 在内置 Web 服务器上本地测试 ASP.NET 应用程序时,我似乎发现了一个差异。
我在本地机器上设置了一个主机,将 dev.testhost.com 与 127.0.0.1 相关联,因为我有一个应用程序需要更改其外观取决于用于调用它的主机 header 。
但是,当我使用 http://dev.testhost.com:1234/index.aspx
请求我的测试应用程序时,Request.Url.Host
的值总是 "localhost"
。而 Request.Headers["host"]
的值是 "dev.testhost.com:1234"
(正如我所期望的那样两者成为)。
我不担心第二个值包含端口号,但我很困惑为什么HOST NAMES 完全不同!有谁知道这是已知问题还是设计使然?还是我是个白痴?!
我宁愿使用 - 由于可能造成困惑! - 山姆Request.Url.Host
,因为这样可以避免在测试时去掉端口号......
最佳答案
Request.Headers["host"]
是从连接到服务器的应用程序收到的值,而另一个值是服务器在尝试获取域名时得到的值。
浏览器在请求中使用输入的域名,因为它用于虚拟域。服务器报告在服务器首选项中设置的那个,或者它找到的第一个。
编辑:查看 Cassini 的代码以查看它是否使用了某些特定设置,我注意到以下代码:
public string RootUrl {
get {
if (_port != 80) {
return "http://localhost:" + _port + _virtualPath;
}
else {
return "http://localhost" + _virtualPath;
}
}
}
//
// Socket listening
//
public void Start() {
try {
_socket = CreateSocketBindAndListen(AddressFamily.InterNetwork, IPAddress.Loopback, _port);
}
catch {
_socket = CreateSocketBindAndListen(AddressFamily.InterNetworkV6, IPAddress.IPv6Loopback, _port);
}
// …
}
解释似乎是 Cassini 明确引用了本地主机,并且没有尝试进行反向 DNS 查找。不同的是,它不会使用 return "http://localhost"+ _virtualPath;
。
关于c# - 为什么 Request ["host"] == "dev.testhost.com:1234"而 Request.Url.Host == "localhost",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1941522/