2011-03-15 44 views
1

刚刚下载IE9并拉起了一个web项目,我用一个IHttpHandler将JavaScript写入网页。在我编写脚本之前,我通过确定会话cookie是否过期来测试该请求是否来自新会话。所以这里是奇怪的部分,在运行IE调试器的时候,我可以看到两个对这个脚本的请求,第一个被中止,然后请求被重试。IE9正在中止,然后重新请求脚本

在第一次请求时,所有事情都会像没有错,没有任何例外。如果请求来自新会话,处理和确定将按预期执行,并相应地设置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

也许你可以通过调整这些各种HTTP缓存/期望设置(HTTP头)来解决? – 2011-03-15 19:00:46

+0

有我的问题是与此问题,请参阅: http://stackoverflow.com/questions/12783878/classic-asp-multiple-aspsessionid-in-cookies – swervedriver 2012-10-09 11:53:55

回答

4

IE8和9具有对HTTP响应流运行看,相当天真地为URL的预解析器获取。然后,它乐观地提取它们,如果它有时间并且打开HTTP会话,并且想到如果它后来知道它需要它们,它将使它们在手边。

这个过程可能由于多种原因而中断,其中一些会在您看到的调试器消息中注明:可能是文档模式切换或者您使用的内容编码不是您认为您使用的内容编码,重新使用。页面是否在标准模式下启动,然后切换到兼容模式? (如果是Intranet站点,情况可能如此。)是否有其他交换机发生?

JavaScript控制台可能包含更多信息,例如, HTML1113: Document mode restart from IE9 Standards to Quirks。在这种情况下,解决方案从开始到select the appropriate DOCTYPE,以便MSIE不切换渲染模式。

+0

这就是是相当多的,这听起来像。我加了解决方案。在我的情况下, – 2011-03-15 19:04:40

+0

是ajaxForm中的{enctype =“multipart/form-data”} – Kaido 2012-07-27 10:56:41

0

好吧,我的测试页是一个普通的ol页面,没有指定Doctype。一旦我放入

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 

它回到正常工作状态。