2011-03-15 31 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"> 

它回到正常工作狀態。