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
中打开了一个错误
我正在按照 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
中打开了一个错误