2011-08-04 72 views
6

我有一個幾個字段的表單。當您提交表單時,服務器會響應重定向(HTTP 302)。IE不遵循重定向,給出「Internet Explorer無法顯示網頁」

當表單提交時,如果有<input type=file>字段,IE不會遵循重定向,而是會出現錯誤:「Internet Explorer無法顯示網頁」。

如果有<input type=file>字段,那麼它確實按照預期的重定向。

HTTP 302響應是,確切地說在兩種情況下都是相同的,只是響應的時間戳不同。

我在IE8和IE9中遇到這種情況。 (我還沒有嘗試過較低版本)。 Firefox,Chrome,Opera和Safari都按照預期遵循重定向。

注:

  • 形式具有屬性enctype="multipart/form-data"
  • 這是通過SSL發生的
  • 重定向不是與表單POST或承載的表單的URL不同的協議,主機或端口。
  • 當我使用Fiddler2檢查HTTP流量時,問題消失並且IE的行爲。
+0

奇數。 302重定向會導致瀏覽器在目標頁面上發出GET,這會丟失上傳的文件(如果有的話)。也許IE的錯誤是一個跡象(和IE總是有糟糕的錯誤信息)。但是,這並不能解釋爲什麼Fiddler會「修復」一些東西。 –

+0

@Marc,在服務器上它是一個Rails應用程序。它接受請求,將文件和內容保存到數據庫中,然後以重定向響應另一個頁面。它應該向這個新頁面發出GET請求,但事實並非如此。 – nicholaides

回答

5

您是否重定向到部分URL或完整URL(包含主機,協議等)?我在PHP中看到很多例子,其中302沒有完整http://server.dom/path/to/file的重定向將被IE忽略或毀壞。在Rails中,這可能是路由器中foo_path和foo_url之間的區別。

+0

謝謝,我會試試看。 – nicholaides

+0

謝謝,這似乎工作。我有一種感覺,這是我的負載平衡器在處理W/HTTPS – nicholaides

3

只需添加到這個具有任何人同樣的問題:

IE瀏覽器似乎很嚴格如何形成頭命令。我的應用程序與掙扎:

header("location:http://www.test.co.uk/test/test.php"); 

header("location:test.php"); 

但開始工作時,命令被修訂爲:

header("Location: http://www.test.co.uk/test/test.php"); 
6

的問題是,3歲,但我最近碰到了這個問題我自己並沒有在任何地方找到正確的答案。這裏標記爲接受的答案並不能真正回答任何問題。

做有什麼區別,我是加入以下頭302響應:

Connection: close 

我被重定向到與完整URL另一個網站,它看起來像IE正試圖通過發送後續的優化連接請求通過相同的TCP流而不重新打開它,但不夠聰明,無法確定該網站是不同的,如果標題中沒有明確的「連接」指令。

這種情況至少發生在IE10和IE11上,其他瀏覽器都沒有這個問題。

+0

何處放置此配置時重寫「302重定向」響應的問題? –

+1

@Mashit它不是配置 - 它是代碼。在ASP.Net應用程序,這將是: 'System.Web.HttpContext.Current.Response.AddHeader(「Connection」,「close」);' 在PHP的情況下,它會是這樣的: 'header('Connection:close')' 儘管到目前爲止,我發現這只是在版本8之前的IIS中的問題。 – Cozzamara

+0

是的。我試圖在php中設置標題。但似乎並沒有工作 –

相關問題