Request.Headers["host"]
- это значение, полученное от приложения, которое подключается к серверу, а другое значение - это значение, которое сервер получает, когда пытается получить имя домена.
Браузер использует в запросе введенное имя домена, поскольку оно используется в случае виртуальных доменов. Сервер сообщает о том, что установлено в настройках сервера, или о первом, которое он находит.
РЕДАКТИРОВАТЬ: Глядя на код Кассини, чтобы увидеть, использует ли он какие-то конкретные настройки, я заметил следующий код:
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);
}
// …
}
Похоже, что объяснение состоит в том, что Кассини делает явную ссылку на localhost и не пытается сделать обратный поиск DNS. Иными словами, он не будет использовать return "http://localhost" + _virtualPath;
.