gpt4 book ai didi

c# - 为什么 Request ["host"] == "dev.testhost.com:1234"而 Request.Url.Host == "localhost"

转载 作者:可可西里 更新时间:2023-11-01 03:09:13 26 4
gpt4 key购买 nike

大家好,在使用 Visual Studio 2008 (Cassini) 在内置 Web 服务器上本地测试 ASP.NET 应用程序时,我似乎发现了一个差异。

我在本地机器上设置了一个主机,将 dev.testhost.com127.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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com