Приложение Django, размещенное на IIS, внезапно начинает показывать страницу "Объект перемещен" плюс тарабарщину при 302 перенаправлении
Внутреннее веб-приложение Django размещено на Windows Server 2008 с IIS 7.5, с включенным Active Directory SSO. Некоторые ссылки в приложении отвечают 302. Например, если запрос направлен на myapp.com/change, сервер ответит 302 и перенаправит на myapp.com/change?user=5. В браузере в поле url отображается myapp.com/change?user=5, но страница выглядит как на картинке выше. Если я нажимаю enter в поле url, то происходит переход на правильную страницу.
Я пытался устранить неполадки с помощью DevTools. При нажатии на /change сервер отвечает 302, за которым следует 200, и больше ничего. 200 пустой, без заголовка или тела, и говорит "Внимание: запрос еще не завершен". В то же время на вкладке chrome отображается крутящийся значок, означающий, что сайт все еще загружается. Через несколько минут запрос 200 завершается, и вращение останавливается.
За последние пару недель в коде ничего не менялось, а два дня назад люди начали сообщать об этой проблеме. Сначала это не происходило со мной. Я пробовал очищать cookie и кэш, использовать разные браузеры и ПК, не мог воспроизвести это, затем вчера была запланированная перезагрузка ПК, и теперь я получаю это на всех моих браузерах и ПК.
Я подозреваю, что эта тарабарщина должна быть реальной html-страницей, каким-то образом добавленной к странице Object Moved. Возможно, 302 не обрабатывается правильно в клиенте. Но это не объясняет, почему это работало раньше.
Я застрял на этом уже два дня. Пожалуйста, если у кого-нибудь есть идеи. Дайте мне знать, если вам нужна дополнительная информация. Спасибо.
2021 пост в этой ссылке сработал для меня:
<outboundRules>
<rule name="Remove injected 201 content" preCondition="Status 201">
<match filterByTags="None" pattern="^(?:.*[\r\n]*)*.*</body>" />
<action type="Rewrite" value="" />
</rule>
<preConditions>
<preCondition name="Status 201" patternSyntax="Wildcard">
<add input="{RESPONSE_STATUS}" pattern="201" ignoreCase="false" />
</preCondition>
</preConditions>
</outboundRules>
Очевидно, это ошибка в IIS 7.5. Вышеописанное является обходным решением, если настроить исходящее правило. В моем случае неправильно работает 302, поэтому я заменил 201 на 302.
Я до сих пор не могу понять, почему он вдруг так себя повел. Что-то должно было измениться, но это изменение произошло не со всеми сразу. Я думаю, что это какое-то обновление на стороне клиента, либо браузера, либо Windows, потому что это начало происходить на ПК, которые я тестировал, после запланированного перезапуска.