【问题标题】:Url decoding problem on deployment with IIS and FastCGI on windows server在 windows 服务器上使用 IIS 和 FastCGI 部署的 URL 解码问题
【发布时间】:2022-07-17 07:14:39
【问题描述】:

我实现了一个应用前端 Angular,后端 Django,使用 IIS 和 FastCGI 部署在 Windows 服务器上。 此应用程序在某个 URL 上提供媒体文件。它在开发服务器上本地运行良好。 我可以正确访问路径“medias/myfilepath”上的所有文件。

问题出在 IIS 的生产环境中。特殊字符以不同的方式编码。我认为是 FastCGI 做到了。我找不到编码规则,并且我的 Django 应用程序无法正确解码,因此我的请求最终出现 404 错误。

以下是本地服务器和生产服务器之间编码差异的一些示例:

  • à |本地 : %C3%80 |产品:%25C0
  • ù |本地 : %C3%99 |产品:%25D9
  • É |本地 : %C3%89 |产品:%25C9

我找不到有关该主题的任何文档,我无权访问 CGI 端的配置。我可以更新 Django 端的解码以适应它,但我找不到适用的...

有人会对这个主题有一些想法吗?

【问题讨论】:

  • 您在寻找有关编码差异的文档吗?
  • 如果您有一些文档可以解释每种情况下使用哪种编码方法,我会很高兴阅读它! :)
  • 关于这个主题的文档很少,我认为您有必要发布详细的错误信息。

标签: django angular iis urlencode fastcgi


【解决方案1】:

这是因为你的本地机器设置为 windows-1255 字符集,我发现在 python 中使用 urllib 将 fastcgi url 编码转换为所需的字符串是最舒服的。

例如,如果我尝试使用名称以附加到 URL 的文本开头的 Test 进行响应:

#views.py

import urllib.parse

def searchViewText(request,text): #text received in windows-1255 encoding
    text = urllib.parse.unquote(text,'windows-1255') #

    tests = Test.objects.filter(name__icontains = text)

context={

    
        "tests" : tests,
      
    }
    return render(request,"search.html",context)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多