刚刚下载了IE9并提取了一个我正在使用IHttpHandler的webproject,它将javascript写入网页。在我编写脚本之前,我通过确定会话cookie是否过期来测试请求是否来自新会话。所以这是奇怪的部分,在运行IE调试器时,我可以看到对此脚本发出两个请求,第一个请求被中止,然后重试请求。
在第一个请求中,一切都通过,没有任何错误,没有异常被抛出。处理和确定请求是否来自新会话按预期执行,我相应地设置了cookie。然后无缘无故地请求被中止。
接下来,浏览器通过旧的过期cookie发送第二个请求,因此确定是新会话并创建第二个会话。第二个请求由浏览器处理而不会出错。
在兼容模式下,FF4,Chrome 10,Safari 5或IE9中不会发生这种情况。但是,如果webapp由VS2010托管,它就不会在标准的IE9中实现。如果我在IIS中运行它,我的会话会加倍。
是否有可能导致此问题的IIS设置?或者这是IE9我需要弄清楚的事情吗?
我正在使用Win7 Ultimate N x64作为我的开发机器。
更新:另一个奇怪的是,如果我使用IHttpHandler的链接刷新页面,则不会发生初始中止。
更新2:这是在第二次请求时在IE9调试器中发布的:
This download occurred following a preparser restart (often due to either document mode switching or mismatched content encoding between a meta tag in the document and the BOM or a server header).
答案 0 :(得分:4)
IE8和9有一个在HTTP响应流上运行的预解析器,非常天真地看待要获取的URL。然后它会乐观地获取它们,如果它有时间并且打开HTTP会话,并且如果以后知道它需要它们的话,它将会有它们。
此过程可能会因多种原因而中断,其中一些原因会在您看到的调试器消息中注明:可能是,文档模式已切换或您正在使用的内容编码不是您认为自己的内容编码使用。页面是否以标准模式启动,然后切换到兼容模式? (如果它是一个内部网站点,则可能是这种情况。)是否还有其他交换机?
JavaScript控制台可能包含更多信息,例如HTML1113: Document mode restart from IE9 Standards to Quirks
。在这种情况下,解决方案从一开始就是select the appropriate DOCTYPE,这样MSIE就不会切换渲染模式。
答案 1 :(得分:0)
好的,我的测试页面是一个没有指定Doctype的纯HTML页面。一旦我加入
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
它恢复了正常行动。