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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de