Internet Explorer阻止了文件下载; “未知文件类型”文件

时间:2009-11-13 23:47:09

标签: ruby-on-rails internet-explorer utf-8 http-headers content-type

我正在开发一个Rails应用程序的前端。在跨浏览器测试中,我立即发现Internet Explorer(显然是所有现代版本,但至少IE 7和IE 8)没有正确解释我试图通过AJAX(使用jQuery)加载为JavaScript的文件。出现文件下载警告,用户需要确认是否应下载该文件。不幸的是,这对于申请来说是不可接受的。

我创建了几个测试文件;一个只是从Amazon S3提供的JavaScript文件;另一个实际上是Varnish / Rails服务的资源URL。后者是触发警告的人。所以:


LINK:URL that gives a warning in IE

请求标题:

Accept:     application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-us) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10

响应标题:

Age:              1952
Cache-Control:    public, max-age=3598
Connection:       keep-alive
Content-Encoding: gzip
Content-Length:   2060
Content-Type:     text/javascript; charset=utf-8
Date:             Fri, 13 Nov 2009 22:54:18 GMT
Etag:             "272d9ec2e59aa92da18758cf42a4d729"
Server:           nginx/0.7.61 + Phusion Passenger 2.2.5 (mod_rails/mod_rack)
Status:           200 OK
Via:              1.1 varnish
X-Powered-By:     Phusion Passenger (mod_rails/mod_rack) 2.2.5
X-Runtime:        0.11573
X-Varnish:        176673116 176651738

LINK:URL that does not give a warning in IE

请求标题:

Accept:     application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_2; en-us) AppleWebKit/531.21.8 (KHTML, like Gecko) Version/4.0.4 Safari/531.21.10

响应标题:

Age:              14
Connection:       keep-alive
Content-Encoding: gzip
Content-Length:   52
Content-Type:     text/javascript
Date:             Fri, 13 Nov 2009 22:55:03 GMT
Etag:             "7b7ded6696ee52551289c856d3173db4"
Last-Modified:    Fri, 13 Nov 2009 22:30:45 GMT
Server:           AmazonS3
Via:              1.1 varnish
X-Amz-Id-2:       CR79uoLC67sr0e0uj4CUOCoBQgcIW/jaJc/FNSA3zsK3Lns/gAqx98/T9h/UeJGm
X-Amz-Request-Id: BCF2F2D69F5126DD
X-Varnish:        1566212056 1566211955

对我来说最直接的内容是“text / javascript; charset = utf-8”的内容类型,用于发出警告的URL - 是否有效?我一直认为只有“text / javascript”才有效。

此外,提供警告的URL返回Content-Type“text / javascript”的内容,但它是一个没有.js扩展名的Rails URL - 这会产生什么影响?

还有其他什么东西可以说出来,或者是否有人对可能导致此问题的原因有任何其他想法?非常感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

已经有一段时间了,我已经忘记了这个问题的细节,但我知道最终的原因是由于POST请求返回了内容类型的“text / javascript”。

显然,IE会将响应标题中返回“text / javascript”的POST解释为安全威胁,这会导致它显示可怕且非常无法提供的错误消息栏。

我们将响应的Content-Type更改为“text / html”并解决了它!

答案 1 :(得分:0)

首先,我会尝试按照您的建议将扩展名更改为.js。 Internet Explorer具有一些令人讨厌的扩展(除其他外)基于启发式方法来确定文档类型。

在某些情况下它也会嗅探内容,因此这种类型的文件应该是典型的开头(没有奇怪的字符,e.t.c。)

答案 2 :(得分:0)

确保您的JQuery语句如下所示:

$.ajax({
  type: "GET",
  url: "test.js",
  dataType: "script"  // Defaults to HTML
});