IE утверждает, что не распознает тип текста / javascript MIME

#javascript #internet-explorer

#javascript #internet-explorer

Вопрос:

Мы разрабатываем приложение Ruby on Rails. Недавно мы повторно развернули это приложение за прокси-сервером Apache, который использует HTTPS.

Поскольку мы сделали это, один из наших пользователей отправляется на следующую страницу при попытке использовать приложение: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 / IE 8 и XPsp2 / IE8

РЕДАКТИРОВАТЬ, добавляя полный HTTP-ответ, который 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'
  

Комментарии:

1. пользователь обращается к URL-адресу через https… есть ли какие-либо предупреждающие сообщения, такие как «загрузка, некоторые ресурсы не защищены»… загруженный через http, который пользователь, возможно, нажал «нет»?

2. Просто для пинки удалите все ваши заголовки, кроме Content-Type . (Вы можете использовать Fiddler < fiddler2.com/fiddler2 > установить точку останова при загрузке и удалить их без изменения конфигурации вашего сайта или сервера.) Давайте убедимся, что один из других заголовков не приводит к путанице. Если это не сработает, попробуйте удалить объявление charset.

3. Какие панели инструментов IE установлены вашим пользователем?

Ответ №1:

Вы должны попробовать application/javascript .

Комментарии:

1. согласно Википедии, IE с 6 по 8 не распознают этот en.wikipedia.org/wiki/Client-side_JavaScript

2. согласно его собственному ответу, это не было связано с тем, что «текст / javascript» не был распознан. ‘application / javascript’ не является правильным ответом, поскольку некоторые версии IE могут не распознавать мой предыдущий комментарий.

3. Я отклонил ваш ответ, а затем отменил отзыв позже, поскольку мне очень не нравится, когда меня отвергают за попытку помочь с запутанными или сложными вопросами. в любом случае, это неправильный ответ.

Ответ №2:

ОК. Похоже, мы с этим разобрались. Это была ошибка в нашем приложении, из-за которой он отправил в браузер какой-то недопустимый 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 путаются в этом.

Комментарии:

1. Похоже, я говорил слишком рано — Javascript прямо сейчас, но мы все еще получаем ошибку на паре компьютеров XP / IE8.

Ответ №3:

IE должен распознавать text / javascript (см., Например, там упоминается ‘text / javascript’). Должны быть задействованы другие факторы. Вы можете попробовать:

(1) вы можете указать тип непосредственно в теге script

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

(2) Поступает ли javascript с того же сайта с тем же протоколом? Пользователь может блокировать незащищенный контент при поступлении с незащищенного адреса, и IE может просто выдать вам вводящее в заблуждение сообщение об ошибке.

(3) Поскольку вы сейчас находитесь за apache, есть ли какие-либо другие заголовки, которые могут сбивать IE с толку?

(4) Бьюсь об заклад, вы проверили, что Rails устанавливает правильное местоположение для ресурсов (т. Е. Он использует прокси-сервер apache, а не rails).

Ответ №4:

указывают ли заголовки http-ответа X-Content-Type-Options: nosniff? если это так, ie9 не будет выполнять какой-либо скрипт, пока вы этого не сделаете

Ответ №5:

Я подозреваю, что ваше содержимое javascript либо неверно, либо просто неправильно «IE». 🙂

Прежде всего, если вы указываете его UTF-8, вы уверены, что это то, что вы обслуживаете? В соответствии с советом Брэда удалите определение кодировки и посмотрите, изменится ли поведение.

Также возьмите копию возвращаемого javascript и попробуйте где-нибудь ее проверить. Я видел, как другие сообщали о проблемах, когда javascript был поврежден определенными конкретными способами, что приводило к сбою только определенных версий IE. Вы объединяете несколько js-файлов или что-то в этом роде? Другой пример — случайный тег %> в вашем файле javascript, который может запутать некоторые браузеры.

Получая возвращаемое значение на стороне клиента с помощью firebug или Chrome developer tools, вы можете быть уверены, что прокси-сервер не искажает заголовки или кодировку (включая gzip).

Я также слышал, что некоторые старые версии IE неправильно обрабатывают mimetypes в iframes. Используете ли вы iframe вообще?

И последнее, но не менее важное: некоторые антивирусные программы / программы безопасности изменяют заголовки приема исходящего запроса (не очень приятно, не так ли?), Заставляя сервер думать, что браузер не поддерживает gzip или что-то в этом роде. Можете ли вы получить копию исходящего запроса для javascript? Вы хотите проверить наличие измененных заголовков запроса.

Комментарии:

1. Да. Я подозреваю, что IE выполняет некоторый синтаксический анализ возвращенного скрипта, чтобы попытаться определить, действительно ли это JS или нет, но я пока точно не знаю, что ему в этом не нравится.

Ответ №6:

Вы можете удалить type атрибут script тега. HTML5 этого не требует, и все браузеры понимают, что это «их местный вариант JavaScript», который вам нужен. Ваша страница не будет проверяться на соответствие типу документа HTML4, но пока вы знаете, почему он не проверяется, я думаю, что все в порядке. Важнее работать, чем проверять.

Комментарии:

1. Это не HTML-документ. У него нет ни типа содержимого, text/html ни doctype тега.

Ответ №7: