IIS6 vs. IIS7 e IIS7.5: manipulando URLs com sinal de mais (+) na base (sem querystring)

34

Para qualquer URL com um sinal de mais (+) no URL base (não na cadeia de consulta), o IIS7 e o IIS7.5 (Windows Server 2008 e 2008 R2) não parecem encaminhar o URL para o manipulador padrão em um ASP Aplicação .NET. Comecei a perceber o problema com um manipulador HTTP personalizado em *.html , mas tenho o mesmo problema com *.aspx . O IIS6 (Server 2003) não tem nenhum problema com essas mesmas URLs.

Para replicar o problema, em um site ASP.NET, criei um conjunto de arquivos ASPX que fez um Response.Write simples com vários nomes:

  1. test_something.aspx
  2. test_some + thing.aspx
  3. test_some thing.aspx

O terceiro arquivo era um teste para ver se o IIS7 [.5] estava tratando mais símbolos como espaços (como faria na querystring); isso não parece ser o caso. Com todos esses arquivos no lugar, pressionar http://somehost/test_some+thing.aspx ou http://somehost/test_some%2bthing.aspx funcionará bem no IIS6, mas 404 no IIS7 / IIS7.5 antes de chegar a qualquer manipulador do ASP.NET. Existe alguma configuração no IIS7 / 7.5 que esteja faltando para que ela "veja" um sinal de adição na URL sem perder a extensão final usada para determinar um manipulador HTTP?

    
por patridge 19.10.2009 / 19:29

2 respostas

34

Após procurar por mais combinações de IIS e mais, parece que o IIS7 [.5] está configurado para rejeitar URLs com um sinal de mais por padrão por algum receio do uso daquele caractere; esse símbolo ainda é permitido na querystring. A solução é alterar o padrão do atributo requestFiltering no <system><webServer><security><requestFiltering> para permitir caracteres duplamente codificados com uma chamada de linha de comando (modificando seu web.config do ASP.NET):

%windir%\system32\inetsrv\appcmd set config "Default Web Site" -section:system.webServer/security/requestFiltering -allowDoubleEscaping:true

Isso pode ser um pouco mais perigoso do que se prefere em seu site, mas parece não haver uma maneira de ser mais específico do que uma permissão geral. Os avisos estavam relacionados ao descompasso que poderia ocorrer entre o uso de um sinal de adição em um URL e sua tradução típica como um espaço. Parece que a única outra alternativa é parar de usar mais caracteres em seus URLs.

    
por 20.10.2009 / 15:41
9

Acabei de descobrir como criar uma regra de reescrita para convencer o IIS7 a mapear pontos positivos em espaços em URLs. No meu caso, era para manter os marcadores ou hiperlinks herdados funcionando.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
<security>
  <requestFiltering allowDoubleEscaping="True" />
</security>
<rewrite>
  <rules>
    <rule name="RewriteUserFriendlyURL1" stopProcessing="false">
      <match url="\+" />
      <conditions>
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
      </conditions>
      <action type="Rewrite" url="{UrlDecode:{REQUEST_URI}}" />
    </rule>
  </rules>
</rewrite>
  </system.webServer>
</configuration>

Veja meu post no blog para mais detalhes e referências.

    
por 03.07.2010 / 02:20