IE 未正确使用其内部网站点的本地缓存,并返回 HTTP 200 而不是 HTTP 304

IE 未正确使用其内部网站点的本地缓存,并返回 HTTP 200 而不是 HTTP 304

我是一名开发人员,在工作中遇到了一个问题。当我创建任何类型的 .Net Web 应用程序(ASP.Net、ASP.Net MVC)、将其部署到本地计算机的 IIS 上或作为内部网 IIS 服务器上的内部网应用程序部署并在浏览器中运行它时,我在 IE 中得到了意外的结果。

通常,当您首次访问网站时,文件会被下载并存储在浏览器的本地缓存中。在后续访问中,浏览器会向服务器发送包含文件 Etag 或上次修改日期的请求。如果文件未发生更改,服务器会以 HTTP 304 进行响应,从而阻止文件的完整传输。

在我的工作网络上,所有浏览器均能正常运行除了IE 总是返回 HTTP 200,因此再次下载该文件。

我可以在 Visual Studio 中启动一个新项目,缓存在其他浏览器上可以正常工作,但在 IE 上不行。如果我在家里(在我自己的电脑上)创建相同的项目,缓存在所有浏览器上都可以正常工作包括IE。

这让我相信有什么东西干扰了这个过程。可能是某些 IE 配置(由组策略控制,但我无权访问)或 IIS 配置(我同样无权访问)或其他完全不同的原因。

我可以访问 IE 的临时文件,并且可以看到这些文件存在于此文件夹中。

这可能是什么原因造成的?在联系系统管理员之前,我需要一些信息。

Fiddler 下的 Headers

Fiddler 下的 Headers

开发人员工具“网络”选项卡

开发人员工具“网络”选项卡

编辑:

这是我在 Visual Studio 的 IIS Express 中创建并托管的新项目:

IE 首次加载: 在此处输入图片描述

Firefox 首次加载: 在此处输入图片描述

IE 第二次加载: 在此处输入图片描述 我们可以看到所有请求都是 200,总时间明显相同。

Firefox 第二次加载: 在此处输入图片描述 我们可以看到,主请求之后的所有请求都是 304,总时间不到第一次加载的一半。

答案1

解决这个问题后,我发现这是由于 IE 11 中的 Internet Explorer 开发人员工具造成的。

我通过同时打开 Fiddler 和 Internet Explorer 开发人员工具发现了这一点。

如果我在“网络”选项卡上打开开发人员工具时点击刷新,则开发人员工具和 Fiddler 将注册所有 HTTP 200。

另一方面,如果我在关闭 Dev Tool 且打开 Fiddler 的情况下点击刷新,Fiddler 将会注册 HTTP 304。

因此,是开发工具强制浏览器不使用缓存。正如建议的那样沙拉瓦南在评论中,这是 IE 11 中的 Dev-Tools 中的配置:

Internet Explorer - 开发工具 - 始终从服务器刷新

当我在家尝试相同的测试时,这种情况没有发生,因为我在家使用 IE Edge,在工作时使用 IE 11。Edge 中的此选项已更改,导致结果不同。

相关内容