Поделиться через


Элемент <httpListener> (параметры сети)

Настраивает параметры, используемые классом HttpListener.

<httpListener
  unescapeRequestUrl ="true|false"
/>

Атрибуты и элементы

В следующих разделах описаны атрибуты, дочерние и родительские элементы.

Атрибуты

Атрибут

Описание

unescapeRequestUrl

Логическое значение, определяющее, использует ли экземплярHttpListener не преобразованный в escape-последовательность URI вместо преобразованного.

Дочерние элементы

Отсутствует.

Родительские элементы

Элемент

Описание

<settings>

Настраивает основные сетевые параметры для пространства имен 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) будет выглядеть следующим образом:

https://www.contoso.com/path/

Служба 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

Имя схемы

Файл проверки

Может быть пустым

См. также

Ссылки

Схема параметров сети

HttpListenerElement

HttpListener

Url