Iis

IE 沒有正確使用它的本地記憶體來處理 Intranet 站點並返回 HTTP 200 而不是 HTTP 304

  • December 5, 2017

我是一名在工作中面臨問題的開發人員。當我創建任何類型的 .Net Web 應用程序(ASP.Net、ASP.Net MVC)時,將其部署在我的本地機器的 IIS 上或作為我們的 Intranet IIS 伺服器上的 Intranet 應用程序並在瀏覽器中執行它,我得到了一個意想不到的結果IE。

通常,當您第一次訪問站點時,文件會被下載並儲存在瀏覽器的本地記憶體中。在隨後的訪問中,瀏覽器向伺服器發送一個請求,其中包含文件 Etags 或上次修改日期。如果文件沒有更改,伺服器可以使用 HTTP 304 響應,從而阻止文件的完整傳輸。

在我的工作網路上,除了IE 之外的所有瀏覽器都可以正常工作,IE 總是返回 HTTP 200 並因此再次下載文件。

我可以在 Visual Studio 中啟動一個新項目,並且記憶體適用於其他瀏覽器但不適用於 IE。如果我在家(在我自己的電腦上)創建相同的項目,記憶體適用於包括IE 在內的所有瀏覽器。

這讓我相信有一些東西干擾了這個過程。可能是一些 IE 配置(由我無權訪問的組策略控制,或者可能是 IIS 配置,我也完全無權訪問或其他東西。

我可以訪問 IE 的臨時文件,並且可以看到這些文件存在於該文件夾中。

這可能是什麼原因造成的?在聯繫系統管理員之前,我需要一些資訊。

Fiddler 下的標頭

Fiddler 下的標頭

開發者工具網路選項卡

開發者工具網路選項卡

編輯:

這是我在 Visual Studio 的 IIS Express 中創建和託管的一個新項目:

IE 首次載入: 在此處輸入圖像描述

Firefox 首次載入: 在此處輸入圖像描述

IE 二次載入: 在此處輸入圖像描述 我們可以看到所有請求都是 200 次,總時間明顯相同。

Firefox Second Load: 在此處輸入圖像描述 我們可以看到,主請求之後的所有請求都是304,總時間不到第一次載入的一半。

在解決了這個問題後,我發現這是由於 IE 11 中的 Internet Explorer 開發人員工具造成的。

我是通過同時打開 Fiddler 和 Internet Explorer 開發者工具發現的。

如果我在“網路”選項卡上打開“開發工具”時點擊刷新,則“開發工具”和 Fiddler 將註冊所有 HTTP 200。

另一方面,如果我在開發工具關閉且 Fiddler 打開時點擊刷新,Fiddler 將註冊 HTTP 304。

所以是開發工具迫使瀏覽器不使用記憶體。正如Saravanan在評論中所建議的,這是 IE 11 開發工具中的配置:

Internet Explorer - 開發工具 - 總是從伺服器刷新

當我在家裡嘗試相同的測試時沒有發生這種情況,因為我在家裡使用 IE Edge 而在工作中使用 IE 11。此選項已在 Edge 中更改,導致結果不同。

引用自:https://serverfault.com/questions/806874