Internet Explorer заблокировал загрузку файлов; файл "Неизвестный тип файла" - PullRequest
0 голосов
/ 14 ноября 2009

Я занимаюсь разработкой приложения для Rails. В кросс-браузерном тестировании я сразу обнаружил, что Internet Explorer (по-видимому, все современные версии, но по крайней мере IE 7 и IE 8) неправильно интерпретирует файл, который я пытаюсь загрузить через AJAX (с jQuery), как JavaScript. Появится предупреждение о загрузке файла, и пользователь должен подтвердить, что файл должен быть загружен. К сожалению, это неприемлемо для целей применения.

Я создал пару тестовых файлов; один - просто файл JavaScript, обслуживаемый Amazon S3; другой - фактически URL ресурса, обслуживаемый Varnish / Rails. Последний является тем, который вызывает предупреждение. Итак:


ССЫЛКА: URL, который выдает предупреждение в 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

ССЫЛКА: URL, который не выдает предупреждение в 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

Что сразу бросается в глаза - это Content-Type «text / javascript; charset = utf-8» для URL, который выдает предупреждение - это действительно? Я всегда предполагал, что только «text / javascript» будет действительным.

Кроме того, URL, который выдает предупреждение, возвращает содержимое Content-Type "text / javascript", но это URL-адрес Rails, который не имеет расширения .js - может ли это иметь значение?

Есть что-нибудь еще, что торчит, или у кого-нибудь есть какие-либо идеи о том, что может быть причиной этой проблемы? Большое спасибо за любую помощь.

Ответы [ 3 ]

1 голос
/ 11 декабря 2009

Прошло некоторое время, и с тех пор я забыл подробности этой проблемы, но я точно знаю, что окончательная причина была в запросе POST, который возвратил Content-Type типа "text / javascript".

Очевидно, IE интерпретирует POST, которые возвращают "text / javascript" в заголовках ответа, как угрозу безопасности, которая заставляет его отображать ужасную и ужасно неинформативную панель сообщений об ошибках.

Мы изменили Content-Type ответа на "text / html", и это решило его!

0 голосов
/ 14 ноября 2009

Убедитесь, что ваша оценка JQuery выглядит примерно так:

$.ajax({
  type: "GET",
  url: "test.js",
  dataType: "script"  // Defaults to HTML
});
0 голосов
/ 14 ноября 2009

Во-первых, я бы попробовал изменить расширение на .js, как вы предложили. Internet Explorer имеет некоторые неприятные (среди прочего) расширения эвристики для определения типа документа.

В некоторых случаях он также анализирует содержимое, поэтому начало должно быть типичным для этого типа файлов (без странных символов, например, т. Д.)

...