Проблема декодирования урлов при развертывании с помощью IIS и FastCGI на сервере windows server
Я реализовал приложение, front-end Angular, back-end Django, развернутое на сервере Windows с использованием IIS и FastCGI. Это приложение обслуживает медиа файлы по определенному URL. Оно прекрасно работает локально на dev-сервере. Я могу получить доступ ко всем моим файлам по пути "medias/myfilepath".
Проблема возникла в производстве на IIS. Специальные символы кодируются по-другому. Я думаю, что это делает FastCGI. Я не могу найти правила кодировки, и мое приложение Django не может правильно декодировать, поэтому мои запросы заканчиваются ошибкой 404.
Вот несколько примеров разницы в кодировке между локальным и производственным сервером :
-
<<<1><<2> к
- | местный : %C3%80 | прод : %25C0 ù
- | local : %C3%99 | prod : %25D9 <<<9><<10><<10>E | local : %C3%89 | prod : %25C9
-
Я не могу найти никакой документации по этому вопросу, у меня нет доступа к конфигурациям на стороне CGI. Я мог бы обновить декодирование на стороне Django, чтобы соответствовать этому, но я не могу найти, какой из них применяется...
У кого-нибудь есть идеи на эту тему?
Вернуться на верхэто происходит потому, что на вашей локальной машине установлена кодировка windows-12xx вместо UTF-8. Мне показалось наиболее удобным использовать urllib в python для преобразования кодировки url fastcgi в нужную строку.
например, если я пытаюсь ответить Тестом, имя которого начинается с текста, добавленного к URL (charset моей машины prod - windows-1255):
#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)