Элемент <httpListener> (параметры сети)
Настраивает параметры, используемые классом HttpListener.
<httpListener
unescapeRequestUrl ="true|false"
/>
Атрибуты и элементы
В следующих разделах описаны атрибуты, дочерние и родительские элементы.
Атрибуты
Атрибут |
Описание |
---|---|
unescapeRequestUrl |
Логическое значение, определяющее, использует ли экземплярHttpListener не преобразованный в escape-последовательность URI вместо преобразованного. |
Дочерние элементы
Отсутствует.
Родительские элементы
Элемент |
Описание |
---|---|
Настраивает основные сетевые параметры для пространства имен System.Net. |
Заметки
Атрибут unescapeRequestUrl указывает, использует ли HttpListener необработанный неэкранированный URI вместо преобразованного URI, в котором все закодированные знаками процента значения преобразованы и предприняты другие шаги по нормализации.
Когда экземпляр HttpListener получает запрос через службу http.sys, он создает экземпляр строки URI, предоставляемый http.sys и предоставляет его как свойство HttpListenerRequest.Url.
Служба http.sys предоставляет две строки URI запроса.
Необработанный универсальный код ресурса (URI)
Преобразованный универсальный код ресурса (URI)
Необработанный универсальный код ресурса (URI) – это System.Uri, предоставляемый в строке запроса HTTP-запроса:
GET /path/
Host: www.contoso.com
Необработанным универсальным кодом ресурса (URI), предоставляемым http.sys для запроса, упомянутого выше, является "/path/". Это представляет строку, следующую за HTTP-командой, так же, как она была отправлена по сети.
Служба http.sys создает преобразованный универсальный код ресурса (URI) из сведений, предоставляемых в запросе, используя URI, предоставленный в строке запроса HTTP и заголовок узла для определения исходного сервера, на который должен быть отправлен запрос. Это делается путем сравнения сведений из запроса с набором зарегистрированных префиксов URI. В документации по пакету SDK сервера HTTP этот преобразованный URI называется структурой HTTP_COOKED_URL.
Чтобы иметь возможность сравнить запрос с зарегистрированными префиксами URI, необходимо выполнить некоторую нормализацию в запросе. Для примера выше преобразованный универсальный код ресурса (URI) будет выглядеть следующим образом:
Служба http.sys объединяет значение свойства Uri.Host и строку из запроса для создания преобразованного универсального кода ресурса (URI). Кроме того, классы http.sys и System.Uri также выполняют следующее:
Учитывает все Отмена процентные значения.
Преобразует процентно закодированные символы, не входящие в набор ASCII в символы UTF-16. Следует отметить, что символы UTF-8 и ANSI и двухбайтовой кодировки (DBCS) поддерживаются также как знаки Юникода (кодировка Юникод с использованием формата %uXXXX).
Выполняет другие действия нормализации, такие как сжатие пути.
Поскольку запрос не содержит никаких сведений о кодировке, используемой для значений в процентной кодировке, может оказаться невозможным определить правильную кодировку, простым разбором значений процентной кодировки.
Поэтому http.sys предоставляет два раздела реестра для изменения процесса:
Раздел реестра . |
Значение по умолчанию |
Описание |
---|---|---|
EnableNonUTF8 |
1 |
Если значение равно нулю, http.sys принимает только URL-адреса в кодировке UTF-8. Если получено значение, отличное от нуля, http.sys также принимает URL-адреса в запросах в кодировке ANSI или двухбайтовой кодировке (DBCS). |
FavorUTF8 |
1 |
Если получено значение, отличное от нуля, http.sys всегда пытается сначала декодировать URL-адрес как UTF-8; если это преобразование завершается неудачей, и EnableNonUTF8 не равен нулю, HTTP.sys пытается расшифровать адрес как кодированный ANSI или двухбайтовой кодировкой (DBCS). Если значение равно нулю (и EnableNonUTF8 не равен нулю) http.sys пытается расшифровать его как ANSI и двухбайтовую кодировку (DBCS); если расшифровка не удалась, производится попытка преобразования UTF-8. |
Когда HttpListener получает запрос, он использует преобразованный URI из http.sys в качестве входного значения для свойства Url.
Нет необходимости поддерживать символы помимо символов и цифр в URI. Например, следующий универсальный код ресурса (URI), который используется для извлечения сведений клиента для клиента номер «1/3812»:
https://www.contoso.com/Customer('1%2F3812')/
Обратите внимание на косую черту процентного кодирования в универсальном коде ресурса (URI) (%2F). Это необходимо, поскольку в данном случае косая черта представляет данные, а не является разделителем пути.
Передачи строки конструктору универсального кода ресурса (URI) приведет к следующим универсальным кодам ресурса (URI):
https://www.contoso.com/Customer('1/3812')/
В результате разделения пути на отрезки будут созданы следующие элементы:
Customer('1
3812')
Это не является целью отправителя запроса.
Если атрибут unescapeRequestUrl имеет значение false, то, когда HttpListener получает запрос, он использует необработанный универсальный код ресурса (URI) вместо преобразованного URI из http.sys в качестве входного для свойства Url.
По умолчанию атрибут unescapeRequestUrl имеет значение true.
Свойство UnescapeRequestUrl может использоваться для получения текущего значения атрибута unescapeRequestUrl из применимых файлов конфигурации.
Пример
В следующем примере кода показано, как настроить класс HttpListener, когда он получает запрос на использование необработанного универсального кода ресурса (URI) вместо преобразованного URI из http.sys в качестве входного в свойстве Url.
<configuration>
<system.net>
<settings>
<httpListener
unescapeRequestUrl="false"
/>
</settings>
</system.net>
</configuration>
Сведения об элементе
Пространство имен |
System.Net |
Имя схемы |
|
Файл проверки |
|
Может быть пустым |