Azure Python 网站未 URL-解码 URL 中的空间

Azure Python website not URL-decoding spaces in URL

我正在按照 Django Azure 教程在 Azure 网站上部署 Django 网站。一切正常,除了一个 URL:我唯一的 URL 接受 spaces。

当我请求 https://mysite.azurewebsites.net/root/path/this%20is%20a%20parameter 时(我检查过查询是用 %20 发送的——而不是 space 或双重编码),Django 中的 PATH_INFO 是其实/root/path/this%20就是%20a%20参数。虽然在我的理解中,它应该用 spaces 而不是 %20 解码 - IIS(实际上,http.sys)负责解码。

它与调试服务器完美配合。但是在 Azure IIS 中,由于值被破坏,我的应用程序崩溃了。

使用查询参数 (?key=value) 时也没有问题(这是合乎逻辑的,因为 IIS 不会触及该部分)。

在访问日志中,奇怪的是我发现加号 (+) 而不是 %20 或 spaces:GET /root/path/this+is+a+parameter(很奇怪,因为 + 不合法在 URL 的那部分,也许它只是一个日志工件?)

最后,我没有使用任何形式的重写 - 我直接将 FastCGI 处理程序映射到此 URL 以避免任何混淆。

<?xml version="1.0"?>
<configuration>
    <appSettings>
        <add key="WSGI_ALT_VIRTUALENV_HANDLER" value="django.core.wsgi.get_wsgi_application()" />
        <add key="WSGI_ALT_VIRTUALENV_ACTIVATE_THIS" value="D:\home\site\wwwroot\env\Scripts\activate_this.py" />
        <add key="WSGI_HANDLER" value="ptvs_virtualenv_proxy.get_virtualenv_handler()" />
        <add key="PYTHONPATH" value="D:\home\site\wwwroot" />
        <add key="DJANGO_SETTINGS_MODULE" value="MYAPP.settings" />   
    </appSettings>
    <system.web>
        <compilation debug="true" targetFramework="4.0" />
        <customErrors mode="Off"/>
    </system.web>
    <system.webServer>
        <handlers>
            <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="D:\Python27\python.exe|D:\Python27\Scripts\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" />
        </handlers>
    </system.webServer>
</configuration>

有没有人遇到过这个并能够检索解码值?谢谢!

最后,这是 Azure 为 WSGI 提供的 IIS 处理程序(WSGI/FCGI 桥)中的一个错误。我在 their GitHub

中打开了一个错误