2010-11-04 3 views
143

На основании этого вопроса: jQuery code not working in IEJavascript Тип MIME

Так text/javascript используется в HTML-документов, чтобы Internet Explorer можно понять. Но мне интересно, когда вы будете использовать application/javascript, и что еще более важно, почему вы использовали бы его вместо text/javascript?

+0

Возможный обман/объяснение: http://stackoverflow.com/questions/876561/when-serving-javascript-files-is-it-better-to-use-the-application-javascript-or – Benn

+0

См. Также http: //stackoverflow.com/questions/2325571/for-http-responses-with-content-types-suggesting-character-data-which-charset-sh – Gumbo

+0

Возможный дубликат [Что такое Javascript MIME Type? Что принадлежит атрибуту type тега скрипта?] (http://stackoverflow.com/questions/189850/what-is-the-javascript-mime-type-what-belongs-in-the-type-attribute-of-a-script) – Bergi

ответ

224

В теории, согласно RFC 4329, application/javascript.

Причина, по которой это должно быть application, не имеет никакого отношения к тому, является ли тип читаемым или исполняемым. Это потому, что существуют собственные механизмы определения набора символов, установленные самим языком/типом, а не только общий параметр charset. Подтип text должен быть перекодирован прокси на другую кодировку, изменяя параметр charset. Это не относится к JavaScript, поскольку:

a. RFC говорит, что пользовательские агенты должны выполнять BOM-sniffing на скрипте, чтобы определить тип (я не уверен, действительно ли какие-либо браузеры делают это);

b. браузеры используют другую информацию - кодировку с включенной страницей, а в - некоторые - браузер определяет атрибут script charset - для определения кодировки. Таким образом, любой прокси-сервер, который пытался перекодировать ресурс, нарушил бы его пользователей. (Конечно, в действительности никто никогда не использует транскодирование проксите в любом случае, но это намерение.)

Поэтому точные байты файла должны быть сохранены точно, что делает его двоичный application типа и технически не характер на основе text.

По этой же причине application/xml является официальным преимуществом по сравнению с text/xml: у XML есть свои внутриполосные сигнальные механизмы кодировки. И все игнорируют application для XML.

text/javascript и text/xml не могут быть официальными Правильными Вещи, но есть все, что сегодня использует по соображениям совместимости, и причины, по которым они неправы, практически не имеют значения.

+3

спасибо большое описание. –

+4

Самое «совместимое» решение - не включать какой-либо тип контента в ответ вообще. RFC заявляет, что без явного типа контента приемник будет интерпретировать его * «по контексту» *, который всегда является правильным поведением для всех браузеров прямо из первых браузеров. – Pacerier

+0

Благодарим вас за подробности. –

5

application потому что .js -Файлы не то, что пользователь хочет прочитать, а что-то, что должно быть выполнено.

+0

Это официальный ответ, но IE задыхается. – Benn

+15

@Benn: Может быть, потому, что пользователи IE должны читать все JS-файлы, потому что они не выполняются должным образом? По крайней мере, это честно Microsoft;) – thejh

+0

Любите свой комментарий, но, к сожалению, люди, которые не могут читать javascript, по-прежнему используют IE, поэтому нам нужно иметь дело с этим :(. –

15

Проблема с MIME-типом Javascript заключается в том, что в течение многих лет не было стандарта. Теперь у нас есть приложение/javascript в качестве официального MIME-типа.

Но на самом деле тип MIME вообще не имеет значения, поскольку браузер может определить сам тип. Вот почему спецификации HTML5 утверждают, что type="text/javascript" больше не требуется.

1

application-javascript - правильный тип для использования, но поскольку он не поддерживается IE6-8, вы собираетесь застрять с текстом/javascript. Если вы не заботитесь о действительности (исключение HTML5), просто не указывайте тип.

+0

Где вы это взяли? Я уверен, что это поддерживается. Или, по крайней мере, это будет проигнорировано. – Zenexer

+0

@ Zenexer прочитал [его ответ на другой вопрос] (http://stackoverflow.com/a/4101106/124119). По-видимому, совместимость с IE означает отсутствие «application/javascript». –

+0

@CamiloMartin Я использую его с IE до 6 все время. Они просто по умолчанию JavaScript. – Zenexer