2009-08-03 2 views
38

Мне нужно, чтобы хост вышел из объекта Request. Какую собственность я должен использовать и почему?Host vs DnsSafeHost

Из MSDN:

Uri.DnsSafeHost недвижимости

Строка, которая содержит неэкранированный хоста часть URI, который подходит для разрешения DNS; или оригинальная неэкранированная строка хоста, если она уже подходит для разрешения.

против

Uri.Host недвижимости

Строка, содержащая имя хоста. Обычно это имя хоста DNS или IP-адрес сервера.

Мои испытания проводились с сервером разработки ASP.NET. Оба они всегда возвращают localhost. Даже когда я ставлю 127.0.0.1, оба возвращаются localhost.

Чтение, свойство DnsSafeHost будет обрабатывать адреса IPv6, а также преобразование Unicode в ASCII, если необходимо. Он также может учитывать IRI и IDN. Хотя я в настоящее время не забочусь об этих вещах, должен ли я просто использовать свойство DnsSafeHost, чтобы быть в безопасности?

ответ

44

Применить DnsSafeHost к URL, если вы намерены отправить полученное имя хоста на DNS-сервер самостоятельно. DNS первоначально был ASCII-единственным протоколом (and a subset of ASCII at that). Существующие в настоящее время URL-адреса позволяют символьные последовательности в хост-части URL-адреса, которые нельзя отправить непосредственно на DNS-сервер. Примерами являются:

  • bracket-enclosed IPv6 addresses. DnsSafeHost снимает скобки.

  • Не-ASCII, неанглийские доменные имена. DnsSafeHost (необязательно) использует RFC 3987 IRI для нормализации символов и преобразует не-ASCII-символ в IDN, Punycode.

  • Кто знает, какие URL-адреса позволят в будущем? Приложение может пережить наши предположения о том, что в URL-адресе будет хорошо. DnsSafeHost добавляет к нему некоторую устойчивость.

Если вам нужно отобразить имя хоста пользователя, вместо этого использовать свойство хоста.

+5

Это имеет смысл. Я не думал о том, как Host можно использовать отображаемое имя, а DnsSafeHost будет использоваться программно. Спасибо за четкий и краткий ответ! –

Смежные вопросы