IE声称不识别文本/javascript MIME类型

IE is claiming not to recognize the text/javascript MIME type

本文关键字:javascript MIME 类型 识别文本 IE      更新时间:2023-09-26

我们一直在开发Ruby on Rails应用程序。我们最近将这个应用重新部署在一个使用HTTPS的Apache代理后面。

由于我们已经这样做了,我们的一个用户在尝试使用应用程序时被发送到以下页面:http://shell.windows.com/fileassoc/mimeassoc.asp?mime=text/javascript,它说:

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

有人知道在什么情况下IE会声称不知道如何处理text/javascript文件吗?到目前为止只有这一个用户。

Windows 7/IE8和XPsp2/IE8

EDIT添加IE禁止的完整HTTP响应

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'

你应该试试application/javascript

好的。看来我们弄明白了。这是我们的应用程序中的一个错误,导致它向浏览器发送了一些无效的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会被这个混淆

IE应该能够识别text/javascript(例如,这里提到了'text/javascript')。肯定还有其他因素在起作用。你可以试试:

(1)你可以直接在script标签

中指定类型
<script type="text/javascript" src="..."></script>

(2) javascript是否来自同一站点,具有相同的协议?当来自不安全的地址时,用户可能会阻止不安全的内容,IE可能只是给你一个误导性的错误信息。

(3)因为你现在在apache后面,还有其他的头可能会让IE困惑吗?

(4)我打赌你检查了Rails设置资源的正确位置(即它使用代理主机,apache,而不是Rails)。

http响应头是否指定X-Content-Type-Options: nosniff?如果是,ie9将不会执行任何脚本,直到你这样做

我怀疑你的javascript内容要么不正确,要么只是不"IE"正确。: -)

首先,如果你说它是UTF-8,你确定这是你提供的吗?按照Brad的建议,删除字符集定义,看看行为是否改变。

还获取返回的javascript的副本,并尝试在某处验证它。我看到其他人报告的问题是,javascript以某些特定的方式被破坏,导致只有某些版本的IE崩溃。你是否在连接多个js文件或类似的东西?另一个例子是javascript文件中意外的%>标签会混淆一些浏览器。

通过使用firebug或chrome开发人员工具抓取客户端返回值,您可以确保代理不会搞砸标头或编码(包括gzip)。

我还听说某些旧版本的IE不能正确处理iframes中的mime类型。你是否在使用ifframe ?

最后但并非最不重要的是,一些防病毒/安全软件会修改传出请求的Accept标头(不是很好吗?)欺骗服务器认为浏览器不支持gzip或其他东西。您可以获取javascript的传出请求的副本吗?您需要检查是否修改了请求头。

可以去掉"script"标签的type属性。HTML5不需要它,所有浏览器都将其理解为"本地风味的JavaScript",这正是你想要的。您的页面不会对HTML4 doctype进行验证,但只要您知道为什么它不验证,我认为这是可以的。工作比验证更重要。

http://shell.windows.com/fileassoc/mimeassoc.asp?mime=joke/trickquestion