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

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

<Конфигурации>
  <system.net>
    <Параметры>
      <httpListener>

Синтаксис

<httpListener  
  unescapeRequestUrl="true|false"  
/>  

Тип

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

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

Атрибуты

Атрибут Описание
unescapeRequestUrl Логическое значение, указывающее, использует ли HttpListener экземпляр необработанный неэкранированный URI вместо преобразованного 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://www.contoso.com/path/

Служба http.sys объединяет Uri.Host значение свойства и строку в строке запроса для создания преобразованного URI. Кроме того, http.sys и System.Uri класс также выполняет следующие действия:

  • Отменяет экранирование всех значений в процентах.

  • Преобразует символы, закодированные в процентах без ASCII, в символьное представление UTF-16. Обратите внимание, что поддерживаются символы UTF-8 и ANSI/DBCS, а также символы Юникода (кодировка Юникода в формате %uXXXXX).

  • Выполняет другие шаги нормализации, например сжатие пути.

Так как запрос не содержит никаких сведений о кодировке, используемой для значений с кодировкой в процентах, определить правильную кодировку просто путем анализа значений в процентах может быть невозможно.

Таким образом 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":

http://www.contoso.com/Customer('1%2F3812')/

Обратите внимание на косую черту, закодированную в процентах, в URI (%2F). Это необходимо, так как в этом случае символ косой черты представляет данные, а не разделитель пути.

Передача строки в конструктор URI приведет к следующему URI:

http://www.contoso.com/Customer('1/3812')/

Разделение пути на его сегменты приведет к следующим элементам:

Customer('1

3812')

Это не намерение отправителя запроса.

Если атрибут unescapeRequestUrl имеет значение false, то при HttpListener получении запроса он использует необработанный URI вместо преобразованного URI из в http.sys качестве входных данных для Url свойства .

Значение по умолчанию для атрибута unescapeRequestUrltrue.

Свойство UnescapeRequestUrl можно использовать для получения текущего значения атрибута unescapeRequestUrl из применимых файлов конфигурации.

Пример

В следующем примере показано, как настроить HttpListener класс при получении запроса на использование необработанного URI вместо преобразованного URI из в http.sys качестве входных данных для Url свойства .

<configuration>  
  <system.net>  
    <settings>  
      <httpListener  
        unescapeRequestUrl="false"  
      />  
    </settings>  
  </system.net>  
</configuration>  

Сведения об элементе

Пространство имен: System.Net

См. также раздел