簡體   English   中英

Django 托管在 IIS 上的應用程序突然開始顯示“對象已移動”頁面以及 302 重定向上的亂碼

[英]Django App hosted on IIS suddenly starts to show "Object Moved" Page plus gibberish on 302 redirect

截屏

It's an internal Django web app is hosted on a Windows Server 2008 with IIS 7.5, with Active Directory SSO enabled. 應用程序中的某些鏈接以 302 響應。例如,如果請求是 go 到 myapp.com/change,則服務器將響應 302 並重定向到 myapp.com/change?user=5。 在瀏覽器中,url 字段顯示 myapp.com/change?user=5,但頁面看起來像上圖。 如果我在 url 字段上按 Enter 鍵,它會轉到正確的頁面。

我嘗試使用 DevTools 進行故障排除。 單擊 /change 時,服務器響應為 302,然后是 200,僅此而已。 200 是空白的,沒有 header 或正文,並顯示“警告:請求尚未完成”。 同時,在 chrome 選項卡上顯示旋轉圖標,表示它仍在加載。 幾分鍾后,200 次超時,旋轉停止。

在過去的幾周里,代碼中沒有任何變化,兩天前人們開始報告這個問題。 起初它並沒有發生在我身上。 我嘗試使用不同的瀏覽器和 PC 清除 cookie 和緩存,但無法復制它,然后昨天計划的 PC 重啟,我現在在我所有的瀏覽器和 PC 上都得到了這個。

我懷疑亂碼應該是實際頁面 html 以某種方式附加到 Object 移動頁面。 也許 302 在客戶端沒有正確處理。 但這並不能解釋為什么它以前有效。

我已經堅持了兩天了。 請,如果有人有任何想法。 如果您需要更多信息,請告訴我。 謝謝。

編輯添加:在屏幕截圖中,從“HTTP/1.1 200..”開始的可讀文本,實際上是以下 200 響應的 header,不知何故混入了 302 的正文。 順便說一句,這個 302 Object 移動頁面以前從未出現過。

鏈接中的 2021 年帖子對我有用:

<outboundRules>
  <rule name="Remove injected 201 content" preCondition="Status 201">
    <match filterByTags="None" pattern="^(?:.*[\r\n]*)*.*&lt;/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 中的一個錯誤。 以上是通過設置 outboundRule 的解決方法。 就我而言,是 302 出了問題,所以我將 201 換成了 302。

我仍然不確定它為什么會突然變成這樣。 一定是發生了一些變化,但這種變化並不是一下子發生在每個人身上的。 我認為這是客戶端的某種更新,無論是瀏覽器還是 Windows,因為它開始發生在我在計划重啟后測試的 PC 上。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM