提前为这个冗长的问题道歉。
我真的是一名数据库程序员,但继承了对最近从 IIS 5 迁移到运行 IIS 6 的新服务器的经典 ASP Intranet 应用程序的支持。用户群大约有十几个,全部使用 IE 6。
UI 显示从数据库返回的项目的层次结构,使用 HTML 无序列表和 javascript 的组合在用户导航时隐藏/展开分支。
图像显示在具有 CSS 的列表成员旁边(使用 list-style-image),每种类型的项目使用不同的图像。层次结构中不同项目类型(以及图像)的数量在 2 到 10 之间变化。层次结构在 20 到 200 之间变化。
问题:
自从迁移到 IIS 6 以来,一些用户遇到了一个问题,这似乎是由于图像未能正确应用于层次结构中的一个或多个项目引起的;列表显示正确,但缺少一张或多张图片,单击任何链接会导致加载空白页面。
使用 Wireshark 和 IIS 日志分析网络流量表明问题不在服务器端 - 所有内容都已正确提供给客户端。
该问题似乎与客户端的内容缓存有关:它似乎更经常影响以前未在当前 PC 上使用过该应用程序或一段时间未使用过该应用程序的用户。此外,我可以通过启动会话、清除浏览器缓存然后刷新页面来复制大约三分之一的问题。但是,在 IIS 5 上运行的应用程序也是如此,因此在迁移到 IIS 6 之前可能已经存在此问题,但发生频率较低。有时,如果我离开会话 20 分钟左右,浏览器似乎会“找到”丢失的图像,并且一切正常。
如果通过本地代理(我使用 Fiddler)访问应用程序,则问题永远不会发生,尽管 Fiddler 连接日志显示与服务器建立的一个或多个连接以检索图像已中止。和以前一样,网络流量显示图像是由服务器返回的。但是,使用代理似乎使 IE 能够从缓存中找到其他成功检索到的图像副本。
我已经到了我对调试 ASP/IIS 问题的有限知识的尽头。从 CSS 中删除 list-style-images 可以解决问题,但这必须是最后的选择,因为它会使应用程序更难使用。
任何关于我如何进行的建议将不胜感激。
编辑
AnonJr 建议这一定是客户端配置问题,因为所有其他组件似乎都在正常运行。
我忽略了一个简单的客户端配置问题,因为这是唯一受所描述问题影响的应用程序我已经测试了工具 > Internet 选项 > 临时文件 > 设置下的所有选项,但行为没有变化。
我应该考虑哪些其他客户端配置选项?
编辑 2 - 一个解决方案
当从客户端脚本生成 HTML 时,接受的答案提示我搜索 IE6 请求多个图像副本的已知问题 - http://support.microsoft.com/default.aspx?scid=kb;en-us; 319546。
该文章(已声明此行为是“设计使然”)建议通过将所需图像加载到不可见的 DIV 中来预缓存所需图像的解决方法:
<DIV style='display:none'><IMG SRC='image.gif'></DIV>
这似乎对我有用 - 我无法再通过在会话中间清除浏览器缓存来复制问题,并且 Fiddler 跟踪显示每个图像仅被请求一次。
我确实发现了一个我以前不知道的警告;IE 缓存区分大小写,因此仅当不可见 DIV 中指定的文件名的大小写与页面中其他地方使用的大小写匹配时才会使用缓存的图像。