![IE 未正确使用其内部网站点的本地缓存,并返回 HTTP 200 而不是 HTTP 304](https://linux22.com/image/691017/IE%20%E6%9C%AA%E6%AD%A3%E7%A1%AE%E4%BD%BF%E7%94%A8%E5%85%B6%E5%86%85%E9%83%A8%E7%BD%91%E7%AB%99%E7%82%B9%E7%9A%84%E6%9C%AC%E5%9C%B0%E7%BC%93%E5%AD%98%EF%BC%8C%E5%B9%B6%E8%BF%94%E5%9B%9E%20HTTP%20200%20%E8%80%8C%E4%B8%8D%E6%98%AF%20HTTP%20304.png)
我是一名开发人员,在工作中遇到了一个问题。当我创建任何类型的 .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
开发人员工具“网络”选项卡
编辑:
这是我在 Visual Studio 的 IIS Express 中创建并托管的新项目:
答案1
解决这个问题后,我发现这是由于 IE 11 中的 Internet Explorer 开发人员工具造成的。
我通过同时打开 Fiddler 和 Internet Explorer 开发人员工具发现了这一点。
如果我在“网络”选项卡上打开开发人员工具时点击刷新,则开发人员工具和 Fiddler 将注册所有 HTTP 200。
另一方面,如果我在关闭 Dev Tool 且打开 Fiddler 的情况下点击刷新,Fiddler 将会注册 HTTP 304。
因此,是开发工具强制浏览器不使用缓存。正如建议的那样沙拉瓦南在评论中,这是 IE 11 中的 Dev-Tools 中的配置:
当我在家尝试相同的测试时,这种情况没有发生,因为我在家使用 IE Edge,在工作时使用 IE 11。Edge 中的此选项已更改,导致结果不同。