2011-10-18 63 views
8

我們一直在開發Ruby on Rails應用程序。我們最近將這個應用程序重新部署在使用HTTPS的Apache代理之後。 http://shell.windows.com/fileassoc/mimeassoc.asp?mime=text/javascript,它說:IE聲稱不識別text/javascript MIME類型

MIME Type: text/javascript 
Description: UnKnown 
Windows does not recognize this MIME type. 

有誰知道在什麼情況下IE就聲稱不

既然我們已經做了我們的用戶的這個人會試圖使用應用程序時發送到以下頁面知道如何處理text/javascript文件?到目前爲止,這只是一個用戶。

視窗7/IE 8和XPSP2/IE8

EDIT並稱IE上

HTTP/1.1 200 OK 
Date: Mon, 24 Oct 2011 00:31:27 GMT 
Server: Apache/2.2.3 (CentOS) 
X-Powered-By: Phusion Passenger (mod_rails/mod_rack) 3.0.9 
ETag: "a6d7d64e3ca943eabc73db920baa7d76" 
Cache-Control: max-age=0, private, must-revalidate 
X-UA-Compatible: IE=Edge,chrome=1 
X-Runtime: 0.003257 
Status: 200 
Content-Type: text/javascript; charset=utf-8 
Connection: close 

window.location.href='https://xx.xx.org.au/AED/sessions/new' 
+0

是通過訪問URL中的用戶HTTPS ...是否有任何警告消息,如「加載一些資源沒有被固定」 ...加載通過HTTP,用戶可能點擊「否」,其? – r0ast3d

+0

只是踢,除了'Content-Type',刪除所有的標題。 (您可以使用Fiddler 在加載時設置斷點,並在不更改站點或服務器配置的情況下刪除它們。)讓我們確保其他標頭之一不會導致事情變得困惑。如果這不起作用,那麼請嘗試刪除字符集聲明。 – Brad

+0

你的用戶安裝了哪些IE工具欄? –

回答

0

IE應該認識文本/ JavaScript的barfs的完整的HTTP響應(參見for example,「文本/ JavaScript的'在那裏被提及)。其他因素必須發揮作用。您可以嘗試:

(1)您可以直接在腳本標記指定類型

<script type="text/javascript" src="..."></script> 

(2)是JavaScript來自同一個站點有相同的協議來嗎?用戶可能會阻止來自不安全地址的不安全內容,並且IE可能會給您一條誤導性的錯誤消息。

(3)因爲你現在在apache之後,有沒有其他的頭文件可能會讓IE搞混? (4)我打賭你檢查了Rails爲資源設置了正確的位置(即它使用代理主機,apache,而不是rails)。

1

好的。看起來我們已經知道了。這是我們的應用程序中的一個錯誤,它導致它向瀏覽器發送一些無效的JavaScript。看來Rails的通過發送一個小JS片段,看起來像這樣處理未經驗證的進程到登錄頁面的重定向:

window.location.href='https://blah.blah.org.au/APP/sessions/new' 

我們有這個文件提出的ERB一個錯字它,而不是發送此:

' %> 
window.location.href='https://blah.blah.org.au/APP/sessions/new' 

有趣的是,只有一些版本的IE會被這個困惑。

+0

看起來我說得太快了 - Javascript現在是正確的,但我們仍然在幾臺XP/IE8機器上發生錯誤。 – AndrewR

0

執行http響應標頭指定X-Content-Type-Options:nosniff? 如果是這樣,ie9將不會執行任何腳本,直到你這樣做

3

你應該嘗試application/javascript

+1

根據維基百科,IE 6至8根據他自己的答案不承認這一個http://en.wikipedia.org/wiki/Client-side_JavaScript – MarianP

+0

,這不是因爲那是文字/ JavaScript的「無法識別。 'application/javascript'不是一個正確的答案,因爲這個可能不被某些版本的IE和我以前的評論所認可。 – MarianP

+0

我降低了你的答案,然後取消了後來的投票,因爲我非常不喜歡因爲試圖幫助混淆或複雜的問題而被低估。無論如何不是正確的答案。 – MarianP

0

我懷疑是你的javascript內容不正確,或者只是不是「IE」正確。 :-)

首先,如果你在說它的UTF-8你確定這是你正在服務的?根據Brad的建議,放棄字符集定義並查看行爲是否改變。

還要抓取正在返回的javascript的副本,並嘗試在某處驗證它。我已經看到其他人報告問題的地方,在某些特定的方式導致只有特定版本的IE瀏覽器崩潰的JavaScript損壞。你連接多個js文件或類似的東西?另一個例子是你的javascript文件中的一個意外的%>標記會混淆一些瀏覽器。

通過抓取使用Firebug或Chrome開發者工具可以確保代理未搞砸了標題或編碼(包括gzip的)返回值客戶端。

我還聽說,某些舊版本的IE不iframe中正確處理MIME類型。你是否使用iframe?

最後但並非最不重要的,一些殺毒/安全軟件會修改傳出請求Accept標頭(不是很好是嗎?)誘騙服務器以爲瀏覽器不支持gzip什麼的。你能抓取JavaScript的傳出請求的副本嗎?你想檢查修改後的請求頭。

+0

是的。我懷疑,IE瀏覽器正在對返回的腳本進行一些解析,以確定它是否真的是JS,但我不確切知道它不喜歡它。 – AndrewR

0

您可以刪除script標籤的type屬性。 HTML5不需要它,所有瀏覽器都將它理解爲「它們本地化的JavaScript」,這正是你想要的。您的網頁不會針對HTML4文檔類型進行驗證,但只要您知道爲什麼它沒有驗證,我認爲沒關係。工作比驗證更重要。

+0

這不是一個HTML文檔。它既沒有內容類型「text/html」也沒有「doctype」標籤。 – eaj