Compartilhar via


Elemento <httpListener> (Configurações de rede)

Personaliza parâmetros usados pela classe HttpListener.

<configuration>
  <system.net>
    <configurações>
      <httpListener>

Syntax

<httpListener  
  unescapeRequestUrl="true|false"  
/>  

Tipo

Atributos e elementos

As seções a seguir descrevem atributos, elementos filho e elementos pai.

Atributos

Atributo Descrição
unescapeRequestUrl Um valor booliano que indica se uma instância HttpListener usa o URI sem escape bruto, em vez do URI convertido.

Elementos filho

Nenhum.

Elementos pai

Element Descrição
configurações Configura as opções de rede básicaspara o namespace System.Net.

Comentários

O atributo unescapeRequestUrl indica se HttpListener usa o URI bruto sem escape, em vez do URI convertido, em que todos os valores codificados por percentual são convertidos e outras etapas de normalização são executadas.

Quando uma instância HttpListener recebe uma solicitação por meio do serviço http.sys, ela cria uma instância da cadeia de caracteres de URI fornecida por http.sys e a expõe como a propriedade HttpListenerRequest.Url.

O serviço http.sys expõe duas cadeias de caracteres de URI de solicitação:

  • URI bruto

  • URI convertido

O URI bruto é o System.Uri fornecido na linha de solicitação de uma solicitação HTTP:

GET /path/

Host: www.contoso.com

O URI bruto fornecido por http.sys para solicitação mencionada acima é "/path/". Isso representa a cadeia de caracteres seguindo o verbo HTTP quando foi enviada pela rede.

O serviço http.sys cria um URI convertido das informações fornecidas na solicitação usando o URI fornecido na linha de solicitação HTTP e o cabeçalho de host para determinar o servidor de origem para o qual a solicitação deve ser encaminhada. Isso é feito comparando as informações da solicitação com um conjunto de prefixos do URI registrados. A documentação do SDK do servidor HTTP se refere a esse URI convertido como a estrutura de HTTP_COOKED_URL.

Para comparar a solicitação com prefixos de URI registrados, é necessário fazer alguma normalização com a solicitação. Para o exemplo acima, o URI convertido seria o seguinte:

http://www.contoso.com/path/

O serviço http.sys combina o valor da propriedade Uri.Host e a cadeia de caracteres na linha de solicitação para criar um URI convertido. Além disso, as classes http.sys a System.Uri também fazem o seguinte:

  • Cancela o escape de todos os valores codificados por percentual.

  • Converte caracteres não ASCII codificados por percentual em uma representação de caracteres UTF-16. Observe que há suporte para caracteres UTF-8 e ANSI/DBCS, bem como caracteres Unicode (codificação Unicode usando o formato %uXXXX).

  • Executa outras etapas de normalização, como compactação de caminho.

Como a solicitação não contém informações sobre a codificação usada para valores codificados por percentual, talvez não seja possível determinar a codificação correta apenas analisando os valores codificados por percentual.

Portanto, http.sys fornece duas chaves do Registro para modificar o processo:

Chave do Registro Valor padrão Descrição
EnableNonUTF8 1 Se for zero, http.sys aceitará apenas URLs codificadas em UTF-8.

Se não for zero, http.sys também aceitará URLs codificadas em ANSI ou codificadas em DBCS em solicitações.
FavorUTF8 1 Se não for zero, http.sys sempre tentará decodificar uma URL como UTF-8 primeiro; se essa conversão falhar e EnableNonUTF8 não for zero, Http.sys tentará decodificá-la como ANSI ou DBCS.

Se zero (e EnableNonUTF8 não for zero), http.sys tentará decodificá-lo como ANSI ou DBCS; se isso não for bem-sucedido, ele tentará uma conversão UTF-8.

Quando HttpListener recebe uma solicitação, ela usa o URI convertido de http.sys como entrada para a propriedade Url.

Há a necessidade de dar suporte a caracteres além de caracteres e números em URIs. Um exemplo é o seguinte URI, que é usado para recuperar informações do cliente para o número do cliente "1/3812":

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

Observe a barra codificada por percentual no Uri (%2F). Isso é necessário, pois, nesse caso, o caractere de barra representa dados, não um delimitador de caminho.

Passar a cadeia de caracteres para o construtor Uri levará ao seguinte URI:

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

Dividir o caminho em seus segmentos resultaria nos seguintes elementos:

Customer('1

3812')

Essa não é a intenção do remetente da solicitação.

Se o atributo unescapeRequestUrl for definido como false, quando HttpListener receber uma solicitação, ele usará o URI bruto em vez do URI convertido de http.sys como entrada para a propriedade Url.

O valor padrão para o atributo unescapeRequestUrl é true.

A propriedade UnescapeRequestUrl pode ser usada para obter o valor atual do atributo unescapeRequestUrl dos arquivos de configuração aplicáveis.

Exemplo

O exemplo a seguir mostra como configurar a classe HttpListener quando ela recebe uma solicitação para usar o URI bruto em vez do URI convertido de http.sys como entrada para a propriedade Url.

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

Informações do elemento

Namespace: System.Net

Confira também